javascript匿名函数变量赋值[重复]

Posted

技术标签:

【中文标题】javascript匿名函数变量赋值[重复]【英文标题】:javascript anonymous function variable assignement [duplicate] 【发布时间】:2016-03-27 03:03:13 【问题描述】:

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

这样写有区别吗:

var myFunction = function myFunction () ;
myFunction.instance = null;

还有这个:

var myFunction = function () ;
myFunction.instance = null;

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

【问题讨论】:

你真的关心myFunction.instance = null;还是只关心函数定义 @Tushar OP 关注 function myFunction()function() @BhojendraNepal 这不是上述问题的欺骗。 这不是你指出的重复 :( 我知道提升.. 其实我在那儿找不到我的问题的答案,如果你能解释一下。 【参考方案1】:

没有。没有区别1

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

唯一的区别是一个函数分配了一个名称,这可能证明是有用的:参见myFunction.namemyFunction.toString(),或从函数范围访问myFunction。由于它是函数表达式(与函数声明相反),因此名称与定义范围内的变量无关; 1旧版浏览器的注意事项已在其他地方介绍。

【讨论】:

你说的基本正确,但是说“不。没有区别”然后说“唯一的区别”有点奇怪。区别在于 (1) 具有命名函数非常适合调试,但 (2) 它们可能会在旧浏览器中导致错误。其中第二个非常重要(例如:***.com/a/8548848/2407870)。 是的,它与大多数事情无关,但 OP 并没有真正说明他关心的 *什么* 差异,所以它可能是相关的。 这个说的很清楚了,不要在这些事情上浪费时间真的=D谢谢【参考方案2】:

不是真的。

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

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

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

另一个区别是从myFunction.toString()myFunction.name 返回的值,如pointed out by user2864740

var a = function b() ;
console.log(a.toString()); // "function b() "
var c = function() ;
console.log(c.toString()); // "function () "

【讨论】:

除此之外别无其他区别? =/ @FrançoisRichard 没问题,很乐意提供帮助。

以上是关于javascript匿名函数变量赋值[重复]的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript 函数

Js基础知识6-JavaScript匿名函数和闭包

JavaScript 匿名函数和闭包

JavaScript——匿名函数和闭包

JavaScript,当变量作为参数传递时更改函数内部的变量值[重复]

javascript 闭包详解