這樣做可以確保您定義的變量/函數都不會進入全局範圍。您在頁面中包含的所有腳本共享相同的全局範圍,因此如果您使用兩個具有相同名稱的獨立腳本定義兩個變量,則它們實際上是指相同的變量。
例如,假設你有a.js和b.js,像這樣定義的:
// a.js
var node = document.getElementById("something");
function frob() {
node.style.display = "none";
}
// b.js
var node = document.getElementById("something-else");
如果你在你的頁面a.js後包括b.js,那麼當你調用frob
這是怎麼回事隱藏「something-else」節點而不是像你期望的那樣「something」節點。
相反,你可以這樣做:
// a.js
(function() {
var node = document.getElementById("something");
window.frob = function() {
node.style.display = "none";
}
})();
// b.js
(function() {
var node = document.getElementById("something-else");
})();
而且裏面b.js的東西,是不會有什麼在a.js.干涉
請注意,實際上我不會將函數直接添加到window
,而是我會做類似於您鏈接到的glow.js腳本的內容:表示我的腳本「名稱空間」的單個全局變量。例如,在jQuery中,該單個全局變量是$
(或jQuery
)。
非常感謝,現在很清楚。 – Michael 2011-03-30 22:51:24