シンプル理解閉鎖
はじめに:機能を実行するようなほとんどのプログラミング言語は、JSはまた、レキシカルスコープを使用して、変数のスコープに依存する関数が定義されている場合、スコープは時期を決定するためにではなく、関数呼び出しよりも、決定されます。関数オブジェクトは、関数の本体の内部は、関数の変数のスコープで維持することができ、このような特性は、コンピュータ文献呼ばれ、スコープチェーンアップによって関連付けることができる闭包
(==関数の変数がスコープチェーンに隠されてもよいことを意味しますインナーラップ関数の変数)==それは見上げるようにします。
まず、コードの一部で見てみましょう:
var scope = 'global scope' //全局变量
function checkScope(){
var scope = 'local scope';//局部变量
function f(){ //嵌套函数
console.log(scope);
};
return f() //返回f执行结果
};
checkScope(); //运行结果 local scope;
このコードは、リターンF内部関数の業績はcheckScope時間を呼び出して、理解するのは簡単です。
のは、わずかに変更された上記のコードを入れてみましょう:
var scope = 'global scope' //全局变量
function checkScope(){
var scope = 'local scope';//局部变量
function f(){ //嵌套函数
console.log(scope);
};
return f //返回f执行结果
};
checkScope()(); //运行结果 local scope;
リターンのみ関数オブジェクトであるとき、そしてcheckScope外に、この関数オブジェクトを呼び出すcheckScopeを呼び出すことで、その後、彼はローカルスコープや結果ではなく、グローバルスコープ内に返さ;
原則:実行スコープチェーンで使用されるJS、このスコープチェーンは、ときに、関数の定義を作成しています。ネストされた関数fは、スコープチェーンに定義されている、の範囲はFを実行するために関係なく、任意の時点の、ローカル変数である必要があり、この結合は、依然としてFの実行時に有効です。(驚きに、この機能の閉鎖十分に強い、彼らはローカル変数(と引数)を取得することができ、かつ保存されています)。
QQグループに参加し、そしてそれをより輝かしい幸せ!!!