一、閉包是什麼
查閱了些許文件,個人理解如下:
閉包是為了讀取函式內部變數而發明的。
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...