[英]Named Function Expression : Difference between var bar = function () {} & var bar = function foo(){}
[英]Difference between var foo = function(){…}() and var foo = (function(){…}())
我一直在研究一些由我不知道的開發人員編寫的現有項目。 瀏覽javascript文件,我看到他們使用這個特定的符號來定義函數:
var ModuleScripts = (function() {
return {
init: function(){...}
};
}())
注意括號function(){...}()
括號function(){...}()
。 這段代碼完美無缺,但是當我想寫一些類似的東西時,我使用這種表示法:
var ModuleScripts = function() {
return {
init: function(){...}
};
}()
我的代碼也很完美。 所以我的問題是:是否有充分的理由在JavaScript中使用括號function(){...}()
?
從立即調用的函數表達式 :
立即調用的函數表達式可以用許多不同的方式編寫,盡管常見的約定是將函數表達式和調用括在括號中。
如果它是IIFE,它將立即執行,ModuleScripts將是一個具有init()函數的對象。 沒有IIFE,ModuleScripts是一個返回對象的函數! 很多時候IIFE用於保護名稱空間,似乎他們試圖在這里做到這一點,但是做得不對。
(!)乍一看它看起來像是一個IIFE,但實際上我認為你的例子中的括號與IIFE不同,並且被拋棄了。 所以你最終看到他們什么都不做。 注意區別。
IIFE立即調用函數表達式:
(function() {
// the code here is executed once in its own scope
})();
你的例子:
var ModuleScripts = (function() {
return {
init: function(){...}
};
}())
更簡單地說是IFFE
(function x(){})()
而你正在看到
( function x(){}() )
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.