我最近一直在一個代碼庫中作業,那里有許多 javascript 檔案,部分是 angularJS、jQuery 和其他庫。它已經存在一段時間了,我很好奇為什么在 AngularJS 中為這么多擴展方法或控制器使用了一種特定的方法。
所以,每次創建一個新的 AngularJS 物件時,它都會被包裝在一個自呼叫函式中:
(function (w) {
w.app.controller('ctrlName', function ($scope, $ngJSdependency, myOwnDependency) {
w.GlobalFunctions.exampleCallGlobalFunction();
$scope someData = w.GlobalData.someData;
});
})(window);
對于我的生活,我不知道為什么。我注意到消除自我呼叫函式和更換每一個參考值之間沒有差異功能w用window。進行這些更改并用 替換所有內容是否有不利之處window?它感覺更干凈,并且與我的 IDE 工具一起使用效果更好。
謝謝!
uj5u.com熱心網友回復:
在不使用現代模塊的舊代碼中,該策略有(至少)四個優點,三個非常次要的和一個相當有用的(但僅與功能相關,而不是window部分):
w比 略短window。:-D通過
w在該函式呼叫中進行本地化,它在被參考時在本地環境中被找到,而不是 JavaScript 引擎必須window在本地環境中尋找,沒有找到它,然后到外部環境去尋找它。window至少在某些瀏覽器上的全域變數(我必須檢查規范以查看它是否被指定)是一個訪問器屬性,這意味著理論上,對它的每個參考都是一個函式呼叫。所以const w = window;呼叫該函式一次并記住它的回傳值,而使用window無處不在(理論上)重復呼叫該函式。但是在 JavaScript 中函式呼叫真的很快。(與傳入
window函式沒有直接關系。)該函式提供了一個私有范圍,用于將其他不需要訪問的東西放在函式之外。
#4 可能是最有用的,正如我上面提到的,它與window方面沒有真正的關系,你可以在沒有window/w的情況下做同樣的事情。
在現代環境中,您可以通過使用模塊獲得 #3,如果您想要 #1 和 #2,您可以這樣做const w = window;或類似。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/363224.html
