簡體   English   中英

function閉包“}());”有區別嗎和 })();

[英]Is there a difference between function closure “}());” and })();

我檢測到我犯了一個錯誤並使用了“}());” 代替 ”})();” 並且代碼工作得很好,這就是它未被檢測到的原因。 我想知道有沒有區別? 由於復制和粘貼,這個錯誤出現在很多單獨的腳本中,這讓我很擔心但很困惑,因為 ESLint 沒有抱怨。 我試圖找到答案,但在搜索“}());”時谷歌沒有給出任何結果並且“javascript wrong functionclosure”給出的結果暗示它們都是相同的,沒有區別。 函數如下所示:

const fname = (function() {
   const cached_func = ...;
   return function(p1, p2) {
     ...
     return cached_func.apply(this, arguments)
  };
}()); <- The error

是的,不同之處在於將您的function()標記內會導致您的語句返回所述 function,就好像您用它的名字來稱呼它一樣。 因此,您可以 append ()並立即執行它。

以下兩個語句產生相同的結果:

// 1
function myFunction(){
    console.log("1")
}
myFunction();

// 2
(function myFunction(){
    console.log("1")
})()

不能在右括號后立即調用 function,因為它會導致Unexpected token ')'錯誤:

function myFunction(){
    console.log("1")
}() // Uncaught SyntaxError: Unexpected token ')'

這兩個 forms 在功能上是相同的。 這純粹是您喜歡的風格選擇。

在此處進一步閱讀

將 function 包裝在括號“()”中的目的是命名空間和控制成員函數的可見性。

它將您的代碼包裝在 function scope 中。

其中 '()' 后跟 function 聲明是立即調用 function 這通常稱為 IIFE

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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