閉包的理解

2022-09-11 18:48:12 字數 1143 閱讀 8420

一、閉包是什麼

查閱了些許文件,個人理解如下:

閉包是為了讀取函式內部變數而發明的。

1

.區域性變數和全域性變數的理解

var y='

魔法小櫻';

function f1()

console.log(y);

//輸出結果是 魔法小櫻;

console.log(x);//

輸出結果是 x is not defined;

//說明了什麼問題呢?說明y是全域性變數,都可以訪問到;x是區域性變數,只有f1可以訪問到;如果我們想在f1的外面訪問到x變數,怎麼辦呢?這就需要用到閉包的知識了

2.鏈式作用域

正規解釋:子物件會一級一級地向上尋找所有父物件的變數。

通俗理解:你可以想象古時候的王權,在皇宮裡,最裡面是皇上,外面一層是貴族**,最外面是老百姓。肯定是裡面的皇帝最牛逼啊,想怎麼搞就怎麼搞,可以獲得所有許可權和資訊。那如果外面的小老百姓想知道皇宮發生了什麼事情,怎麼辦呢?就要通過皇宮裡的人來獲得資訊咯。

3.閉包講解啦

請看例子:

function f1()

//我就是乙個方法,乙個能夠獲得s的方法,相當於皇宮裡面的太監

}console.log(s);

//獲取不到s的啦這樣;

----------------------------------------------function f1()

return

f2;

}console.log(f1()());

//這樣才能獲取s的值

-----------------------------------------------function f1()

return

f2();

}console.log(f1());

//或者這樣才能獲取s的值

//那f2和f2()的區別是什麼呢?簡單的說,f2表示f2這個函式本身,f2加了括號後,就是執行這個函式。你可以自己寫個函式,console.log一下看看。

所以大牛們為了方便,往往寫成以下形式:

function f1();//

這樣返回了f2這個函式體本身,沒有執行

}f1()();這樣就ok了;

閉包的理解

閉包 是指有權訪問另乙個函式作用域中的變數的函式。建立閉包的常見方式就是在乙個函式內部建立另乙個函式 在函式createcomparisonfunction 中返回了乙個匿名函式,建立了乙個閉包。當匿名函式被返回時,其作用域鏈包含外部函式createcomparisonfunction的作用域鏈,這...

閉包的理解

function a return b b不能直接越過a在全域性作用 var c a c i 1var inner 定義 function outer outer 呼叫 inner 呼叫function outer x return inner var i outer 3 i 3 輸出6特點 1 函...

閉包的理解

function f1 alert a 報錯 a is not defined這裡的a是區域性變數,函式內部可以訪問外部變數,但是外部不可以訪問內部變數。因此會報錯 值得注意的是 函式內部宣告變數的時候,一定要使用var命令。如果不用的話,實際上是宣告了乙個全域性變數。function f1 ret...