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

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

以下代码行之间有什么区别?

//Function declarationfunction foo() { return 5; }//Anonymous function expressionvar foo = function() 
{ return 5; }//Named function expressionvar foo = function foo() { return 5; }
  • 什么是命名/匿名函数表达式?
  • 什么是声明的函数?
  • 浏览器如何以不同的方式处理这些构造?

对类似问题的回答是什么(VARFunctionName=function(){}vs函数名(){}不完全正确吗?


繁星coding
浏览 544回答 4
4回答

缥缈止盈

功能声明function foo() { ... }因为功能提升,以这种方式声明的函数可以在定义之后和之前调用。函数表达式命名函数表达式var foo = function bar() { ... }匿名函数表达式var foo = function() { ... }foo()只有在创造之后才能被调用。立即调用函数表达式(function() { ... }());结语Crocford建议使用函数表达式,因为它清楚地表明foo包含函数值的变量。嗯,就我个人而言,我更喜欢使用宣言,除非有表达的理由。

尚方宝剑之说

关于第三项定义:var foo = function foo() { return 5; }下面是一个示例,说明如何使用递归调用的可能性:a = function b(i) {   if (i>10) {    return i;  }  else {    return b(++i);  }}console.log(a(5));  // outputs 11console.log(a(10)); // outputs 11console.log(a(11)); // outputs 11console.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 6console.log(d(8)); // outputs 8

慕姐4208626

第一个语句取决于声明的上下文。如果它是在全局上下文中声明的,它将创建一个名为“foo”的隐含全局变量,它将是指向该函数的变量。因此,函数调用“foo()”可以在您的javascript程序中的任何地方进行。如果函数是在闭包中创建的,它将创建一个名为“foo”的隐含局部变量,然后可以用“foo()”调用闭包内的函数。编辑:我还应该说,函数语句(第一个)是在函数表达式(另两个)之前解析的。这意味着,如果在脚本底部声明函数,则仍然可以在顶部使用它。函数表达式只有在被执行的代码击中时才会得到计算。结束编辑语句2和3几乎是等价的。同样,如果在全局上下文中使用,它们将创建全局变量,如果在闭包中使用将创建局部变量。但是,值得注意的是,语句3将忽略函数名,因此您可以任意调用该函数。因此var foo = function foo() { return 5; }是相同的var foo = function fooYou() { return 5; }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript