var a = function(){return true;}
var a = function abc(){return true;}
谁能给我解释一下这两者之间的区别是?两个不同的匿名函数声明之间的区别?
var a = function(){return true;}
var a = function abc(){return true;}
谁能给我解释一下这两者之间的区别是?两个不同的匿名函数声明之间的区别?
的这里不同的是,这里
var a = function abc(){return true;}
您命名一个匿名函数。该名称abc
仅适用于该功能的内部范围。
UPDATE
尽管一些实现不尊重该公约......不要指望IE8与它的工作这是真的......
至少,它应该是这样......一些实现搞砸然而:( – Cu3PO42
第二个功能是命名函数表达式。它对于递归可能是有用的,例如
// 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'
注意,使用命名函数表达式是没有必要的递归 - 因为'了'是在内部功能的范围内都有效,你可以在你的例子中做'a(v-1)'。 – OverlappingElvis
@OverlappingElvis:但请注意,这与函数的不同引用一起工作,在本例中为'b'引用。即使原来的'a'引用被覆盖,这种技术仍然可以继续工作,而如果你在'a'上再次出现问题,它会崩溃。 –
@ScottSauyet谢谢,我想解释它,但你更快。 – KooiInc
的你的例子都只是函数表达式 - 也就是说,你要指定一个表达式(这恰好是一个函数)给一个变量。区别在于一个是匿名的,另一个是所谓的“命名函数表达式”。 http://kangax.github.io/nfe/对函数声明,表达式和命名表达式之间的区别有很好的概述。简短的版本:
只需添加到您的答案中,我发现对于较大的项目,为调试目的命名该函数(第二行)很方便(如果出现错误,Chrome控制台将显示名称),但随后会有一个缩小器/清理工通过并去除生产版本的名称。 – samanime
好点 - 通过删除函数名称在缩小时不应该丢失任何东西。 – OverlappingElvis
的可能重复的[VAR functionName =函数(){} VS功能使用functionName(){}](HTTP://计算器.COM /问题/ 33 6859/var-functionname-function-vs-function-functionname) – matth
这些函数中只有一个是匿名的。另一个是名为**的函数,称为'abc'。 – pete
这是*不*这个问题的副本(虽然我相信这是一个重复的),如*的*两者的形式这里有'FunctionExpressions' - 一个只是有一个名字。 – user2864740