1.作爲命名空間的函數:
通過將代碼放到函數內,將全局變量轉換爲局部變量,防止同名衝突。
(function() {
//模塊代碼
}())
2.閉包:
在外部函數中設置局部變量並得以在閉包的作用域中保存,實現隱藏私有屬性:
var uniqueInterger = (function() {
var counter = 0;
return function() {return counter++;};
} ());
注意:
(1).嵌套的函數不會講作用域的私有成員複製一份:
//這裏的閉包關聯的變量v
function constfunc(v) {return function() {return v;};}
var funcs = [];
for (i = 0; i < 10; i++) {
//讓閉包中的v都爲獨立的副本
funcs[i] = constfunc(i);
}
funcs[5](); //5
function constfuncs() {
var funcs = [];
for (var i = 0; i < 10; i++) {
//閉包關聯了i, 在執行循環以後i變成了10
funcs[i] = function() {return i;};
}
return funcs;
}
var funcs = constfuncs();
funcs[5](); //10
(2).閉包的this值並不一定是外部函數的this值,如果要使用外部函數的this值最好在外部函數中聲明一個變量保存外部函數的this;
(3).外部函數和閉包的argumnets對象同(2);