卖逼视频免费看片|狼人就干网中文字慕|成人av影院导航|人妻少妇精品无码专区二区妖婧|亚洲丝袜视频玖玖|一区二区免费中文|日本高清无码一区|国产91无码小说|国产黄片子视频91sese日韩|免费高清无码成人网站入口

javascript的作用 JavaScript里的閉包是什么?應(yīng)用場(chǎng)景有哪些?

JavaScript里的閉包是什么?應(yīng)用場(chǎng)景有哪些?閉包是指在Javascript中,內(nèi)部函數(shù)總是可以訪問(wèn)其所在的外部函數(shù)中聲明的參數(shù)和變量,即便外部函數(shù)已經(jīng)被銷(xiāo)毀,閉包任然可以持有它們(參數(shù)或變量)

JavaScript里的閉包是什么?應(yīng)用場(chǎng)景有哪些?

閉包是指在Javascript中,內(nèi)部函數(shù)總是可以訪問(wèn)其所在的外部函數(shù)中聲明的參數(shù)和變量,即便外部函數(shù)已經(jīng)被銷(xiāo)毀,閉包任然可以持有它們(參數(shù)或變量)

使用場(chǎng)景

很多人可能不清楚閉包是什么,但是在下代碼時(shí)其實(shí)已經(jīng)時(shí)不時(shí)地用到了閉包。比如:

利用閉包實(shí)現(xiàn)私有變量

慎用閉包

閉包是一把雙刃劍,需要慎用。。。

正如它的定義一樣,閉包能夠保存函數(shù)外部的參數(shù)或變量 ,那么外部函數(shù)被銷(xiāo)毀時(shí),被閉包持有的這些參數(shù)或變量,在閉包函數(shù)被銷(xiāo)毀前,是不會(huì)被銷(xiāo)毀的,我們需要清晰地知道,這些閉包函數(shù)它們的銷(xiāo)毀時(shí)機(jī),避免內(nèi)存泄漏 , 比如:


上圖寫(xiě)了一段偽代碼,Dep中的getProfile方法和該方法訪問(wèn)的 profile變量構(gòu)成了一個(gè)閉包,這個(gè)閉包被 document 注冊(cè)成為了一個(gè)click handler,所以在這個(gè)click handler被注銷(xiāo)之前, 閉包所持有的 profile變量都會(huì)一致停留在內(nèi)存無(wú)法釋放,如果開(kāi)發(fā)者忽略了注銷(xiāo)事件的問(wèn)題,就會(huì)造成較嚴(yán)重的內(nèi)存泄漏。

JavaScript閉包好處是什么?為什么用到閉包?

閉包可以用在許多地方。它的最大用處有兩個(gè),一個(gè)是可以讀取函數(shù)內(nèi)部的變量,另一個(gè)就是讓這些變量的值始終保持在內(nèi)存中,不會(huì)在f1調(diào)用后被自動(dòng)清除。

為什么使用閉包我舉個(gè)例子

"use strict"
function num(){
//用var聲明一個(gè)變量num1
var num1 = 15
}
alert(num1)//num1 is not defined

我們?cè)诤瘮?shù)外是訪問(wèn)不了函數(shù)內(nèi)的局部變量!正常的情況下我們是辦不到的

假設(shè)我們有個(gè)需求需要訪問(wèn)函數(shù)內(nèi)的變量,我們就可以用閉包實(shí)現(xiàn)

"use strict" function num(){ //用var聲明一個(gè)變量num1 var num1 = 15 return function(){ return num1 } } var num2 = num() var num3 = num2() alert(num3)//15 這樣我們就可以取到局部變量了。這就是閉包!