關於閉包的理解

2022-07-17 15:30:27 字數 1216 閱讀 2176

閉包官方定義:閉包是指程式中有許多變數和繫結變數的執行環境。

本人自己理解:程式的**段允許存在一級函式並且一級函式不能被釋放,一級函式沒有釋放之前,外部可以使用一級函式的區域性變數。

進一步理解 : 閉包就是外部可以使用區域性變數。

閉包的功能:1、外部可以使用區域性變數。

2、使函式不能釋放。

閉包的缺點:外部會修改區域性變數,會大量占用記憶體,記憶體不會被釋放。

為什麼一級函式不能被釋放?

答:因為一級函式中有乙個函式,這個函式使用了一級函式的變數,我們返回了這個函式並建立乙個變數接收了。那麼這個函式就不會被js的垃圾**機制銷毀。

最常用的一種形式是函式作為返回值被返回

var f =function()

returnn;}

console.log(f()());

一種變形的形式是將內部函式賦值給乙個外部變數

var

inner;

var f =function();

inner =n;

};f();

console.log(inner());

閉包可以通過函式引數傳遞函式的形式來實現

var inner =function(fn)

var f =function()

inner(n);

}f();

我們通過提供getter()和setter()函式來將要操作的變數儲存在函式內部,防止其暴露在外部

var

getvalue,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...