【问题标题】:javascript anonymous function variable assignement [duplicate]javascript匿名函数变量赋值[重复]
【发布时间】: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 这不是上述问题的欺骗。
  • 这不是你指出的重复 :( 我知道提升..
  • 其实我在那儿找不到我的问题的答案,如果你能解释一下。

标签: javascript


【解决方案1】:

没有。没有区别1

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

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

【讨论】:

  • 你说的基本正确,但是说“不。没有区别”然后说“唯一的区别”有点奇怪。区别在于 (1) 具有命名函数非常适合调试,但 (2) 它们可能会在旧浏览器中导致错误。其中第二个非常重要(例如:stackoverflow.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 没问题,很乐意提供帮助。
猜你喜欢
  • 2016-11-05
  • 2017-07-01
  • 1970-01-01
  • 2013-11-22
  • 1970-01-01
  • 1970-01-01
  • 2011-08-20
  • 2015-03-21
  • 2015-02-19
相关资源
最近更新 更多