淺析 JavaScript 中的閉包(Closures)

一、前言

對(duì)于 JavaScript 來(lái)說(shuō),閉包是一個(gè)非常強(qiáng)大的特征。但對(duì)于剛開始接觸的初學(xué)者來(lái)說(shuō)它又似乎是特別高深的。今天我們一起來(lái)揭開閉包的神秘面紗。閉包這一塊也有很多的文章介紹過(guò)了,今天我就淺談一下自己對(duì)閉包的的一些理解,希望能提供一點(diǎn)鄙陋的見解幫助到正在學(xué)習(xí)的朋友。該文章中能使用口語(yǔ)化的我將盡量使用口語(yǔ)化的敘述方式,希望能讓讀者更好理解,畢竟文章寫出來(lái)宗旨就是要讓人讀懂。文章難免有不足之處還希望幫忙指出。

二、Javascript 的作用域鏈

在了解閉包之前,我們先來(lái)看看幾個(gè)準(zhǔn)備知識(shí)。

  1. 變量的作用域

    首先,什么是作用域?域,區(qū)域。簡(jiǎn)單來(lái)理解就是一個(gè)變量能被訪問(wèn)的范圍(區(qū)域)。換言之就是這個(gè)變量能起作用的區(qū)域。按這個(gè)標(biāo)準(zhǔn)來(lái)劃分我們將變量分為 全局變量 和 局部變量 兩種

    以定義的方式來(lái)區(qū)分有以下特點(diǎn):

    定義在函數(shù)內(nèi)部的變量是局部變量,定義在函數(shù)外部的變量是全局變量。(這個(gè)并不只是 Javascript 語(yǔ)言的特點(diǎn))局部變量在函數(shù)內(nèi)部能被訪問(wèn),在函數(shù)外部不能被直接訪問(wèn),所以局部變量就是從定義它的地方開始到函數(shù)結(jié)束的位置結(jié)束。當(dāng)然這里有個(gè)細(xì)節(jié)--變量提升。等下我們用一小段代碼提一下函數(shù)提升是什么。我們先來(lái)看看局部變量和全局變量的代碼

    復(fù)制代碼
    var a = 0; function testFunc(){ var b = 1;
        console.log('-------------函數(shù)內(nèi)輸出-------------');
        console.log(a);//0 console.log(b);//1 } 
            		

    網(wǎng)友評(píng)論