跳至正文
首页 » 博客 » Easy JavaScript Part 11: Simplifying function expressions and the function statement

Easy JavaScript Part 11: Simplifying function expressions and the function statement

在JavaScript中,可以通过三种可能的方式创建函数:

  1. 函数作为表达式
  2. 函数作为语句
  3. 箭头函数

在这篇文章中,我们将学习函数表达式和函数语句。

考虑下面的代码:

函数add (num1num2) {返回num1  num2; }var res = add (72);控制台日志(res);

当您创建如上所示的函数时,它被称为函数声明或语句您可以重写上面的代码,以不同的方式添加函数,如下所示:

var添加=功能(num1,num2){返回num1  num2;} var res = add (72);控制台日志(res);

上面创建的函数称为函数表达式 ,在本例中为匿名函数表达式。命名函数表达式可以创建如下:

var添加=功能a(num1,num2){返回num1  num2; }var res = add (72);控制台日志(res);

函数表达式的名称只能在函数体内使用,这在递归中很有用。函数表达式可以是:

  1. 命名函数表达式
  2. 匿名函数表达式

创建函数的第三种方法是使用Arrow函数,该函数是在ECMAScript 6中引入的。您可以了解更多箭头功能在这里

关于命名函数的一些要点如下:

  1. 一个函数语句不能创建没有名称
  2. 一个函数表达式可以创建没有名字,这意味着你可以创建一个匿名函数

吊装

函数语句被悬挂在执行上下文的顶部。因此,您可以在声明之前调用作为语句创建的函数。考虑下面的代码:

foo ();foo () 函数 { 控制台日志("foo")// foo}

由于foo函数是作为函数语句创建的,因此它被提升,因此可以在创建之前调用。

函数声明或语句被提升在执行上下文的顶部, 而函数表达式不被提升。考虑下面的代码:

foo (); // 错误foo不是函数foo var = function () { 控制台日志("foo")} 

由于在这里, foo函数是作为表达式创建的,因此它不会被提升到执行上下文的顶部。因此,当您尝试在创建函数foo之前调用它时,您将得到 “foo不是函数” 的错误。了解更多关于函数提升这里

关于吊装需要记住的一些要点:

  1. 函数语句被悬挂在执行上下文的顶部,因此您可以在创建它之前调用它。
  2. 函数表达式不会在执行上下文的顶部悬挂,因此您无法在创建它之前调用它。

立即调用

可以立即调用函数表达式 (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应用程序。

</p