两个不同的匿名函数声明之间的区别?

时间:2014-01-29 21:02:24

标签: javascript

var a = function(){return true;}
var a = function abc(){return true;}

有谁可以向我解释这两者之间的区别是什么?

3 个答案:

答案 0 :(得分:4)

这里的不同之处在于

var a = function abc(){return true;}

您正在命名匿名函数。此名称abc仅适用于函数的内部范围。

<强>更新

确实有些实现不遵守惯例......不要指望 IE8 使用它......

答案 1 :(得分:3)

你的两个例子都只是函数表达式 - 意味着你要为变量赋一个表达式(恰好是一个函数)。区别在于一个是匿名的,而另一个是所谓的“命名函数表达式”。 http://kangax.github.io/nfe/对函数声明,表达式和命名表达式之间的区别有很好的概述。简短版本:

  • 在很多情况下,这些东西在很多情况下是可以互换的
  • 如果您进行了大量调试,使用命名而不是匿名函数可以使您的调用堆栈更容易阅读
  • 但是,某些涉及使用命名函数表达式的JavaScript实现中存在错误

答案 2 :(得分:2)

第二个函数是一个命名函数表达式。它可能对递归很有用,例如

// named
var a = function abc(v) { console.log(v); return v>1 && abc(v-1) || v;}
//                                                      ^ name abc is known
   ,b = a
a(3); //=> 3,2,1
b(4); //=> 4,3,2,1
a = function (v) {console.log('value = '+ v);};
b(3); //=> 3,2,1

// versus
var a = function (v) { console.log(v); return v>1 && a(v-1) || v;}
//                                                   ^ using a here
   ,b = a
a(3); //=> 3,2,1
b(4); //=> 4,3,2,1
a = function (v) {console.log('value = '+ v);};
b(3); //=> 'value = 3'