2013-05-01 88 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