簡體   English   中英

var foo = function(){...}()和var foo =(function(){...}())之間的區別

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM