閉包與函數有着緊密的關係,它是函數的代碼在運行過程中的一個動態環境,是一個運行期的、動態的概念。
所謂閉包,是指詞法表示包括不必計算的變量的函數。也就是說,該函數能夠使用函數外定義的變量.。
在程序語言中,所謂閉包,是指語法域位於某個特定的區域,具有持續參照(讀寫)位於該區域內自身範圍之外的執行域上的非持久型變量值能力的段落。這些外部執行域的非持久型變量神奇地保留他們在閉包最初定義(或創建)時的值。
var a = 'xiao A';
var obj = {
a : 'xiao B',
getName : function(){
return function(){
return this.a;
}
}
}
console.log(obj.getName()());
//閉包的基本用法
var name = 'xiao A';
var obj = {
name : 'xiao B',
getName : function(){
//this總是指向調用者
var o = this;
return function(){
return o.name;
}
}
}
console.log(obj.getName()());
//閉包最簡單的理解就是:一個函數,可以訪問另外一個函數的作用域
//封閉性:類似於java private起到一個保護作用
function f(x){
var temp = x; //局部變量,temp已經沒有被使用
return function(x){
temp += x; //又被調用
console.log(temp);
}
}
var a = f(10);
a(5);
a(10);
a(20);