2013-05-01 87 views
2

有什么区别:`var MyConstructor = function MyConstructor()`做了什么?

var NodestrapGenerator = module.exports = function NodestrapGenerator() { 
    yeoman.generators.Base.apply(this, arguments); 
    // more code here 
}; 

和:我想写我的自耕农发电机的index.js中的CoffeeScript

var NodestrapGenerator = module.exports = function() { 
    yeoman.generators.Base.apply(this, arguments); 
    // more code here 
}; 

,但显然第二个片段是不一样的,因为它不工作!谢谢!

+0

应该没有区别。重要的部分是设置'module.exports'。 – Brad 2013-05-01 17:06:19

+0

一些代码在这里不显示必须嗅探代码,并期望看到arguments.callee.name与公用命名变量相关联。 – dandavis 2013-05-01 17:11:49

+0

第一个是命名函数表达式,第二个是匿名函数表达式。有些地方在'//这里有更多的代码',这个名字必须被称为重要的。 – generalhenry 2013-05-01 17:13:10

回答

4
var NodestrapGenerator = module.exports = function NodestrapGenerator() { ... }; 

这是一个命名的功能称为 “NodestrapGenerator”,赋给变量NodestrapGenerator

var NodestrapGenerator = module.exports = function() { ... }; 

这是一个匿名函数又名。 匿名函数,它被赋值给变量NodestrapGenerator

最后,它们都是引用相同的函数,所以没有区别你写它的方式。

更多解释见这样的:var functionName = function() {} vs function functionName() {}

至于为什么它不工作,它可能是因为代码寻找命名函数NodestrapGenerator以验证它应该使用功能,而不是一些随机匿名函数。

仅供参考,function有一个属性name将在命名功能(第一个例子)被置到"NodestrapGenerator",但将空字符串""匿名函数(第二个例子)。 (见https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function/name