2018-12-20\閉包

閉包(closure)是javascript語言的一個難點,許多高級應用都需要 它來實現(xiàn)。

一、變量的作用域

js語言的變量可以分為局部變量和全局變量。js的獨特之處就在于函數(shù)內(nèi)部可以直接讀取全局變量。

var n = 999;
function f1(){
var m = 666;
alert(n);
}

f1(); //999  函數(shù)f1會從父集作用域讀取全集變量n
alert(m); //error  無法讀取函數(shù)局部變量m

二、如何從外部讀取局部變量

出于某些原因,有時我們需要從外部讀取函數(shù)內(nèi)部變量。這時候就通過變通的方式實現(xiàn):在函數(shù)內(nèi)部再定義一個函數(shù):

function f1(){
   var n=999;
   function f2(){
        alert(n);
   }
return f2;
}
var result = f1();
result(); //  999

上面的代碼中,f2可以讀取f1中的局部變量,那么只要把f2做為返回值,我們就可以在f1外部讀取它的內(nèi)部變量了。
這里插播一下:

f1()=> f2(){....}

當我們執(zhí)行 f1得到的是f2的函數(shù)申明,當需要執(zhí)行該函數(shù)時,需要把返回的f2當作一個整體來執(zhí)行,除了下面申明一個result的方式外,還有兩種寫法:

(f1(){...} )()
( f1(){...} ())

上面代碼塊中的f2函數(shù)就是閉包。

三、閉包的用途

閉包最大的用處有兩個:1.可以讀取函數(shù)內(nèi)部的函數(shù) 2.讓這些變量的值始終保持在內(nèi)存中。

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容