为了账号安全,请及时绑定邮箱和手机立即绑定

函数表达式与JavaScript中的声明有什么区别?

函数表达式与JavaScript中的声明有什么区别?

繁星coding 2019-05-30 17:21:12
函数表达式与JavaScript中的声明有什么区别?以下代码行之间有什么区别?//Function declarationfunction foo() { return 5; }//Anonymous function expressionvar foo = function()  { return 5; }//Named function expressionvar foo = function foo() { return 5; }什么是命名/匿名函数表达式?什么是声明的函数?浏览器如何以不同的方式处理这些构造?对类似问题的回答是什么(VARFunctionName=function(){}vs函数名(){}不完全正确吗?
查看完整描述

4 回答

?
缥缈止盈

TA贡献2041条经验 获得超4个赞

功能声明

function foo() { ... }

因为功能提升,以这种方式声明的函数可以在定义之后和之前调用。

函数表达式

  1. 命名函数表达式

    var foo = function bar() { ... }
  2. 匿名函数表达式

    var foo = function() { ... }

foo()只有在创造之后才能被调用。

立即调用函数表达式

(function() { ... }());

结语

Crocford建议使用函数表达式,因为它清楚地表明foo包含函数值的变量。嗯,就我个人而言,我更喜欢使用宣言,除非有表达的理由。


查看完整回答
反对 回复 2019-05-30
?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

关于第三项定义:


var foo = function foo() { return 5; }

下面是一个示例,说明如何使用递归调用的可能性:


a = function b(i) { 

  if (i>10) {

    return i;

  }

  else {

    return b(++i);

  }

}


console.log(a(5));  // outputs 11

console.log(a(10)); // outputs 11

console.log(a(11)); // outputs 11

console.log(a(15)); // outputs 15

编辑:更有趣的闭包示例:


a = function(c) {

 return function b(i){

  if (i>c) {

   return i;

  }

  return b(++i);

 }

}

d = a(5);

console.log(d(3)); // outputs 6

console.log(d(8)); // outputs 8


查看完整回答
反对 回复 2019-05-30
?
慕姐4208626

TA贡献1852条经验 获得超7个赞

第一个语句取决于声明的上下文。

如果它是在全局上下文中声明的,它将创建一个名为“foo”的隐含全局变量,它将是指向该函数的变量。因此,函数调用“foo()”可以在您的javascript程序中的任何地方进行。

如果函数是在闭包中创建的,它将创建一个名为“foo”的隐含局部变量,然后可以用“foo()”调用闭包内的函数。

编辑:

我还应该说,函数语句(第一个)是在函数表达式(另两个)之前解析的。这意味着,如果在脚本底部声明函数,则仍然可以在顶部使用它。函数表达式只有在被执行的代码击中时才会得到计算。

结束编辑

语句2和3几乎是等价的。同样,如果在全局上下文中使用,它们将创建全局变量,如果在闭包中使用将创建局部变量。但是,值得注意的是,语句3将忽略函数名,因此您可以任意调用该函数。因此

var foo = function foo() { return 5; }

是相同的

var foo = function fooYou() { return 5; }


查看完整回答
反对 回复 2019-05-30
  • 4 回答
  • 0 关注
  • 543 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信