Javascript匿名函数可变分配

javascript anonymous function variable assignement

本问题已经有最佳答案,请猛点这里访问。

可能不是最好的问题,但我有一个疑问。

写这个有什么不同吗:

1
2
var myFunction = function myFunction () {};
myFunction.instance = null;

而这:

1
2
var myFunction = function () {};
myFunction.instance = null;

编辑:请仔细阅读,这不是此var functionname=function()vs function functionname()的副本上面的链接解释了提升,这里是关于两个提升函数的分配,一个匿名,一个不匿名。


不,没有区别。

在这两种情况下,都会创建一个新的函数对象(通过函数表达式),将其分配给一个变量,然后通过属性分配进行变异。

唯一的区别是,一个函数有一个指定的名称,这可能被证明是有用的:参见myFunction.namemyFunction.toString(),或者从函数范围内访问myFunction。因为它是一个函数表达式(而不是函数声明),所以名称与定义范围内的变量没有关系;1遗留浏览器的保存在其他地方。


不是真的。

主要区别在于代码的大小(一条语句较长),因为将函数存储到变量中会忽略实际的函数名:

1
2
var a = function b() {};
console.log(b); // Uncaught ReferenceError: b is not defined(…)

在这种情况下,它看起来是相同的,原因是您对两者都使用了相同的变量名,因此您的变量将指向函数。

另一个差异是用户2864740指出的从myFunction.toString()myFunction.name返回的值。

1
2
3
4
var a = function b() {};
console.log(a.toString()); //"function b() {}"
var c = function() {};
console.log(c.toString()); //"function () {}"