在JavaScript中,可以通过三种可能的方式创建函数:
- 函数作为表达式
- 函数作为语句
- 箭头函数
在这篇文章中,我们将学习函数表达式和函数语句。
考虑下面的代码:
函数add (num1,num2) {返回num1 num2; }var res = add (7,2为 );控制台。日志(res);
当您创建如上所示的函数时,它被称为函数声明或语句您可以重写上面的代码,以不同的方式添加函数,如下所示:
var添加=功能(num1,num2){返回num1 num2;} var res = add (7,2为 );控制台。日志(res);
上面创建的函数称为函数表达式 ,在本例中为匿名函数表达式。命名函数表达式可以创建如下:
var添加=功能a(num1,num2){返回num1 num2; }var res = add (7,2为 );控制台。日志(res);
函数表达式的名称只能在函数体内使用,这在递归中很有用。函数表达式可以是:
- 命名函数表达式
- 匿名函数表达式
创建函数的第三种方法是使用Arrow函数,该函数是在ECMAScript 6中引入的。您可以了解更多箭头功能在这里。
关于命名函数的一些要点如下:
- 一个函数语句不能创建没有名称
- 一个函数表达式可以创建没有名字,这意味着你可以创建一个匿名函数
吊装
函数语句被悬挂在执行上下文的顶部。因此,您可以在声明之前调用作为语句创建的函数。考虑下面的代码:
foo ();foo () 函数 { 控制台。日志("foo")// foo}
由于foo函数是作为函数语句创建的,因此它被提升,因此可以在创建之前调用。
函数声明或语句被提升在执行上下文的顶部, 而函数表达式不被提升。考虑下面的代码:
foo (); // 错误foo不是函数foo var = function () { 控制台。日志("foo")}
由于在这里, foo函数是作为表达式创建的,因此它不会被提升到执行上下文的顶部。因此,当您尝试在创建函数foo之前调用它时,您将得到 “foo不是函数” 的错误。了解更多关于函数提升这里
关于吊装需要记住的一些要点:
- 函数语句被悬挂在执行上下文的顶部,因此您可以在创建它之前调用它。
- 函数表达式不会在执行上下文的顶部悬挂,因此您无法在创建它之前调用它。
立即调用
可以立即调用函数表达式 (IIFE),这意味着函数表达式可以在定义后立即执行。考虑下面的代码:
var foo = () 函数 { 控制台。日志("foo");}();
上面,我们正在创建一个函数表达式并立即调用它,这是允许的。但是,如果您尝试立即调用函数语句,则会出现错误。见下文:
foo ()
函数 {控制台。日志("foo");} ();
上面的代码将抛出无效令牌的错误。要立即调用函数语句,您需要将其包装在大括号内,创建一个不同的范围:
(foo函数 () {控制台。日志("foo");})();
通过使用IIFE,我们实现了数据隐私。在IIFE内部创建的任何变量,无论是函数表达式还是语句,都不能在外部访问。
Name函数表达式
属性
在函数表达式中,您将函数表达式分配给变量,该变量将具有name属性。变量的name属性包含函数的名称。考虑这个代码:
var foo = abc () 函数 {控制台。日志(“嘿”);} 控制台。日志(foo。姓名);// 打印abc
在foo变量中,我们分配一个命名函数表达式abc ,因此变量foo的name属性将包含值abc。对于匿名函数表达式,变量名称属性将与变量名称相同:
var foo = () 函数 {控制台。日志(“嘿”);}控制台。日志(foo。姓名);// 打印foo
由于我们正在创建一个匿名函数表达式,因此变量名称属性将与变量名称相同,您将获得foo。
调用一个函数在体内
要在函数自身内部调用函数,需要创建一个命名函数表达式。请记住,函数表达式的名称仅在函数主体中可用,并且它是主体范围的局部名称。您可以使用命名函数表达式编写一个函数来查找数字的阶乘,如下所示:
var阶乘=功能f(n){if (n 1 <=) {返回1;}返回n * f (n 1-);} var r = 阶乘4 ();控制台。日志(右);
如果你想避免使用命名函数表达式,并想在其体内调用一个函数,那么你应该arguments.ca llee使用。在上面,阶乘函数可以重写为匿名函数,如下面的清单所示:
var阶乘=功能(n){if (n 1 <=) {返回1;}返回n个 * 参数。被叫 (n-1-);} var r = 阶乘30 ();控制台。日志(右);
如您所见,我们使用arguments.ca llee来避免命名函数表达式并在其主体内调用函数。了解更多关于参数这里
结论
JavaScript函数可以通过三种可能的方式创建: 函数语句、函数表达式和箭头函数。在这篇文章中,我们了解了函数语句和函数表达式,但是在这个 “Easy JavaScript” 系列的下一篇文章中,您将了解JavaScript的另一个重要概念,因此请继续关注。同时,不要忘记查看Ignite UI ,您可以将其与HTML5,Angular,React或ASP.NET MVC一起使用来创建富Internet应用程序。