閉包

成都創(chuàng)新互聯(lián)公司成立與2013年,先為新北等服務(wù)建站,新北等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為新北企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
按中文的意思就是關(guān)上一個包的意思。如果我們把函數(shù)的作用域當(dāng)做是一個包的話,那這個詞很形象體現(xiàn)了它的作用 。函數(shù)的正常的執(zhí)行流程是當(dāng)函數(shù)中的語句執(zhí)行完后,程序會自動銷毀這個函數(shù)的作用域,但是當(dāng)一個函數(shù)中聲明了另一個函數(shù),并且這個子函數(shù)執(zhí)行時存在引用父函數(shù)的變量,就會形成閉包,形象點(diǎn)說就相當(dāng)于把父函數(shù)的作用域給關(guān)閉了起來,不讓程序去銷毀它。
例如:
function a() {
var name = "xuxu";
function b() {
console.log(name);
}
// 此處產(chǎn)生閉包
b();
}
a();當(dāng)函數(shù)可以記住并訪問它所在的作用域鏈時,就產(chǎn)生了閉包 當(dāng)然,大部分的閉包都不是這么直觀的,因?yàn)樽雍瘮?shù)的調(diào)用是可以在父函數(shù)之外的,例如:
function a() {
var name = "xuxu";
function b() {
console.log(name);
}
return b;
}
var c=a();
// 此處產(chǎn)生閉包 此處的c函數(shù)其實(shí)就是a函數(shù)
c();通過以上代碼,我們也可以看出一個閉包的好處,就是我們再全局作用域(此處是widow)下訪問到了局部作用域(a函數(shù))的作用域的值,按正常的詞法作用域是無法這么做的,但是當(dāng)我們使用閉包是就可以了。然后我們再看一點(diǎn)我們平時寫的比較多的:
function foo() {
var a = 2;
function baz() {
// 2
console.log( a );
}
bar( baz );
}
function bar(fn) {
// 大家快看呀,這就是閉包!
fn();
}又或者
var fn;
function foo() {
var a = 2;
function baz() {
console.log( a );
}
// 將baz分配給全局變量
fn = baz;
}
function bar() {
// 大家快看呀,這就是閉包!
fn();
}
foo();
// 2
bar(); 以上也是閉包,因此在函數(shù)內(nèi)部調(diào)用子函數(shù),或者通過何種手段將內(nèi)部函數(shù)傳遞到所在的詞法作用域以外,它都會持有對原始定義作用域的引用,無論在何處執(zhí)行這個函數(shù)都會使用閉包。
本文名稱:js中的閉包學(xué)習(xí)心得
文章位置:http://chinadenli.net/article4/pgjpie.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、手機(jī)網(wǎng)站建設(shè)、ChatGPT、網(wǎng)站排名、App設(shè)計、小程序開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)