閉包是一種保護私有變量的機制,在函數執行時造成私有的做用域,保護裏面的私有變量不受外界干擾。直觀的說就是造成一個不銷燬的棧環境。
對於閉包,當外部函數返回以後,內部函數依然能夠訪問外部函數的變量。閉包
function f1() { var N = 0; // N是f1函數的局部變量 function f2() // f2是f1函數的內部函數,是閉包 { N += 1; // 內部函數f2中使用了外部函數f1中的變量N console.log(N); } return f2; } var result = f1(); result(); // 輸出1 result(); // 輸出2 result(); // 輸出3
function User() { var name; this.setName = function(value) { name = value; }; this.getName = function() { return name; }; } var u = new User(); u.setName("Rohmeng"); console.log(u.name); // 輸出undefined console.log(u.getName()); // 輸出Rohmeng
對象u的name屬性爲私有屬性,使用u.name不能直接訪問函數