亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

自動執行匿名JavaScript函數的括號位置?

自動執行匿名JavaScript函數的括號位置?

慕村225694 2019-06-01 16:23:10
自動執行匿名JavaScript函數的括號位置?我最近比較了當前版本的json2.js使用我在項目中的版本,我注意到函數表達式是如何創建和自執行的。用于在圓括號中包裝匿名函數并執行它的代碼,(function () {   // code here})();但是現在它將自動執行的函數封裝在括號中。(function () {   // code here}());在接受的答復中,CMS有一個評論。解釋JavaScript封裝的匿名函數語法“兩者都:(function(){})();和(function(){}());是有效的。“我想知道有什么區別?前者是否通過保留一個全局匿名函數來占用內存?括號應該放在哪里?
查看完整描述

4 回答

?
牧羊人nacy

TA貢獻1862條經驗 獲得超7個贊

那樣的話沒關系。您正在調用第一個定義中解析為函數的表達式,并在第二個示例中定義并立即調用一個函數。它們是相似的,因為第一個示例中的函數表達式只是函數定義。

對于調用解析函數的表達式,還有其他更明顯有用的情況:

(foo || bar)()


查看完整回答
反對 回復 2019-06-01
?
墨色風雨

TA貢獻1853條經驗 獲得超6個贊

除了語法之外,沒有任何不同之處。

關于你對第二種方法的關注:

考慮:

(function namedfunc () { ... }())

namedfunc即使您提供了名稱,也不會在全局范圍內。匿名函數也是如此。在該范圍內獲得它的唯一方法是將其賦值給父類中的一個變量。

((namedfunc = function namedfunc () { ... })())

外部父母是不必要的:

(namedfunc = function namedfunc () { ... })()

但你無論如何都不想要那份全球宣言,對吧?

因此,它歸結為:

(function namedfunc () { ... })()

您還可以進一步減少它:名稱是不必要的,因為它永遠不會被使用(除非您的函數是遞歸的。)即使那樣你也可以用arguments.callee)

(function () { ... })()

這就是我對它的看法(可能是不正確的,我還沒有閱讀ECMAScript規范)。希望能幫上忙。


查看完整回答
反對 回復 2019-06-01
  • 4 回答
  • 0 關注
  • 787 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號