閉包官方定義:閉包是指程式中有許多變數和繫結變數的執行環境。
本人自己理解:程式的**段允許存在一級函式並且一級函式不能被釋放,一級函式沒有釋放之前,外部可以使用一級函式的區域性變數。
進一步理解 : 閉包就是外部可以使用區域性變數。
閉包的功能:1、外部可以使用區域性變數。
2、使函式不能釋放。
閉包的缺點:外部會修改區域性變數,會大量占用記憶體,記憶體不會被釋放。
為什麼一級函式不能被釋放?
答:因為一級函式中有乙個函式,這個函式使用了一級函式的變數,我們返回了這個函式並建立乙個變數接收了。那麼這個函式就不會被js的垃圾**機制銷毀。
最常用的一種形式是函式作為返回值被返回
var f =function()returnn;}
console.log(f()());
一種變形的形式是將內部函式賦值給乙個外部變數
varinner;
var f =function();
inner =n;
};f();
console.log(inner());
閉包可以通過函式引數傳遞函式的形式來實現
var inner =function(fn)var f =function()
inner(n);
}f();
我們通過提供getter()和setter()函式來將要操作的變數儲存在函式內部,防止其暴露在外部
vargetvalue,setvalue;
(function()
setvalue =function(v)
}})();
console.log(getvalue());//0
setvalue(1
);console.log(getvalue());
//1
使用閉包可以很方便的實現乙個迭代器
function setup(x)}var next = setup(['
a','
b','c'
]);console.log(next());
//'a'
console.log(next());//
'b'console.log(next());//
'c'
謝謝大家
關於閉包的理解
發表一下關於閉包的理解 首先把每乙個函式看成乙個乙個的 小黑屋 小黑屋裡面可以看到外面的東西,但外面卻看不到小黑屋裡面的東西,就好比是函式可以訪問外面全域性變數,但是外面卻訪問不了 小黑屋 裡面的變數 變數分為全域性變數和區域性變數 列 函式可以訪問外面全域性變數 var a 1 function ...
關於閉包的理解
js複習決定把閉包這個特性好好研究清楚 閉包是一種函式特性把,函式包含子函式,通過子函式訪問自身變數,然後在講子函式返回,達到普通函式做不到的特性 普通函式可以訪問全域性變數,但是不能訪問其他函式的變數 var n 1 function f1 f1 1 function f2 f2 b is not...
關於JS閉包的理解
閉包要解決的問題是 乙個函式可以擁有私有變數,並且外部可以通過閉包訪問該私有變數 閉包是一種保護私有變數的機制,在函式執行時形成私有的作用域,保護裡面的私有變數不受外界干擾。直觀的說就是形成乙個不銷毀的棧環境。計數器例項 區域性變數計數。p button onclick myfunction 1 b...