[英]local and global variables in JS
我有以下javascript代碼
var globalConfiguration = null;
function loadFile(filePath) {
}
function onLoadPage() {
}
function getConfiguration() {
}
function process() {
}
我想使用IIFE將所有函數封裝在一個閉包中,以避免混亂全局名稱空間,因此我寫道:
(function(window){
var globalConfiguration = null;
function loadFile(filePath) {
}
function onLoadPage() {
}
function getConfiguration() {
}
function process() {
}
});
但是,我不太了解這個概念,現在在我的HTML頁面中,我將如何調用函數onLoadPage
?
現在,您已經封閉了模塊,您需要確定要向外界公開的內容。 您想公開的任何內容都可以導出 。 另外,您需要確定要附加到的上下文 (在本例中為window
)。 然后立即傳遞上下文(從而完成IIFE)。
例如:
(function(window){
var exports = {};
var globalConfiguration = null;
function loadFile(filePath) {
}
function onLoadPage() {
}
function getConfiguration() {
}
function process() {
}
exports.getConfiguration = getConfiguration;
window.myModule = exports;
})(window);
附加到傳入的window
對象是一種以受控方式導出內容的方法。 因此,您確實需要將上下文(在本例中為窗口)傳遞給IIFE。 也許, window
並不總是調用的上下文。
運行此代碼后, myModule
將在全局范圍內可用。
您不能以某種方式將其放在全局名稱空間中。
我建議構造這樣的代碼:
function ExampleHelper() {
(function(scope) {
scope.globalConfiguration = null;
scope.loadFile = function(filePath) {
};
scope.onLoadPage = function() {
};
scope.getConfiguration = function() {
};
scope.process = function() {
};
})(this);
}
var foo = new ExampleHelper(); // "foo" now contains all of your functions
foo.onLoadPage();
您可以將函數設置為window.onload回調。
(function(window) { var globalConfiguration = null; window.onload = onLoadPage; function loadFile(filePath) {} function onLoadPage() { alert('hello world'); } function getConfiguration() {} function process() {} }(window));
這稱為函數/方法鏈接,通常這樣做是為了提高代碼的可讀性,並避免使用臨時變量來保存每個函數的返回值。
我看到您想使用閉包來避免使全局對象混亂。 但是,請注意,我們編寫了可重用性的函數。 盡管創建了一個閉包,但是請確保外部函數內部的方法是抽象的,以便它們可以被代碼的其他部分使用。 例如:從您的代碼中,您有一個loadFile方法可以重用。
現在來看一下如何使用鏈中描述的方法。
假設:(由於我不知道您為什么編寫這些方法,因此我做出了一些假設)。
。的onPageLoad()的loadFile(getConfiguration())處理();
重要的部分是在鏈接中正確設置了對象的范圍。 為此,每個方法必須將引用返回到適當的對象。
希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.