閉包

**閉包**

```

閉包的三大特點(diǎn)為:

1、函數(shù)嵌套函數(shù)

2、內(nèi)部函數(shù)可以訪(fǎng)問(wèn)外部函數(shù)的變量

3、參數(shù)和變量不會(huì)被回收。

列:

function test(){

? ? var a=1;

? ? return function(){

? ? ? alert(a);

? ? }

? }

? var try=test();

? try();//彈出a的值

這個(gè)例子中,變量a在test方法外部是無(wú)法訪(fǎng)問(wèn)的,但test方法里面,嵌套了一個(gè)匿名函數(shù),通過(guò)return返回,test作用域中的變量a,

可以在匿名函數(shù)中訪(fǎng)問(wèn)。并且當(dāng)test方法執(zhí)行后,變量a所占內(nèi)存并不會(huì)釋放,以達(dá)到嵌套的函數(shù)還可以訪(fǎng)問(wèn)的目的。

```

閉包作用

```

閉包的作用在于,可以通過(guò)閉包,設(shè)計(jì)私有變量及方法。

舉例來(lái)說(shuō):在java中創(chuàng)建perosn類(lèi),含有私有變量name。

public class Person{

? ? private String name='wy';

? ? public Person(val){

? ? ? name=val;

? ? }

? ? public void setName(val){

? ? ? name=val;

? ? }

? ? public String getName(){

? ? ? return name;

? ? }

}

```

全局

```

最外層函數(shù)定義的變量擁有全局作用域,即對(duì)任何內(nèi)部函數(shù)來(lái)說(shuō),都是可以訪(fǎng)問(wèn)的

列:

var outerVar = "outer";

? ? ? function fn(){

? ? ? ? console.log(outerVar);

? ? ? }

? ? ? fn();//result:outer

```

局部

```

和全局作用域相反,局部作用域一般只在固定的代碼片段內(nèi)可訪(fǎng)問(wèn)到,而對(duì)于函數(shù)外部是無(wú)法訪(fǎng)問(wèn)的,最常見(jiàn)的例如函數(shù)內(nèi)部

列:

function fn(){

? ? ? ? var innerVar = "inner";

? ? ? }

? ? ? fn();

? ? ? console.log(innerVar);// ReferenceError: innerVar is not defined

```

**作用域鏈**

```

在JavaScript中,函數(shù)也是對(duì)象,實(shí)際上,JavaScript里一切都是對(duì)象。函數(shù)對(duì)象和其它對(duì)象一樣,擁有可以通過(guò)代碼訪(fǎng)問(wèn)的屬性和一系列僅供JavaScript引擎訪(fǎng)問(wèn)的內(nèi)部屬性。其中一個(gè)內(nèi)部屬性是[[Scope]],該內(nèi)部屬性包含了函數(shù)被創(chuàng)建的作用域中對(duì)象的集合,這個(gè)集合被稱(chēng)為函數(shù)的作用域鏈,它決定了哪些數(shù)據(jù)能被函數(shù)訪(fǎng)問(wèn)。

列:

當(dāng)一個(gè)函數(shù)創(chuàng)建后,它實(shí)際上保存一個(gè)作用域鏈,并且作用域鏈會(huì)被創(chuàng)建此函數(shù)的作用域中可訪(fǎng)問(wèn)的數(shù)據(jù)對(duì)象填充。例如定義下面這樣一個(gè)函數(shù)

function func() {

? ? ? ? ? ? var num = 1;

? ? ? ? ? ? alert(num);

? ? ? ? }

? ? ? ? func();

```

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容