很多關(guān)于JS的書(shū)籍例如《JavaScript權(quán)威指南》或者《高程》都把閉包解釋的晦澀難懂,萌新們是怎么也看不懂??!不過(guò)別怕,今天我就用很簡(jiǎn)單的方式給大家講解下到底什么是閉包。這是一篇面對(duì)新手的對(duì)于閉包的解釋?zhuān)瑳](méi)有晦澀生硬的語(yǔ)句,一看就能明白。如有不妥歡迎指正!
要理解閉包,首先要理解變量的作用域。
JS中變量作用域有兩個(gè):全局變量以及局部變量,顧名思義,全局變量就是在任何位置都可以引用的變量,局部變量就是只能在特定位置才能引用的變量,看下面代碼。
var globalScope="global scope";
function f(){
var localScope="local scope";
console.log(globalScope);//global scope
}
console.log(localScope);//undefined
在函數(shù)f()內(nèi)可以訪(fǎng)問(wèn)到函數(shù)體外定義的globalScope,而在函數(shù)體外不能訪(fǎng)問(wèn)到函數(shù)體內(nèi)定義的localScope,這就是全局變量與局部變量的區(qū)別。
難道在函數(shù)體外就永遠(yuǎn)訪(fǎng)問(wèn)不到localScope了嗎?非也,閉包就是為此而生。
function f(){
var localScope="local scope";
return function(){
console.log(localScope);
}
}
f()();//local scope
我們?cè)诤瘮?shù)f()外訪(fǎng)問(wèn)到了局部變量localScope,這里在函數(shù)f()內(nèi)定義的匿名函數(shù)就是一個(gè)閉包!
這里兩個(gè)圓括號(hào)是什么意思呢?我們可以簡(jiǎn)單理解成執(zhí)行兩次f(),執(zhí)行一次得到function(){console.log(localScope);},再執(zhí)行一次相當(dāng)于執(zhí)行這個(gè)匿名函數(shù)。
好了,對(duì)閉包的簡(jiǎn)單理解就是這么多,謝謝閱讀!
原創(chuàng)文章,轉(zhuǎn)載請(qǐng)注明出處!