2017-10-09 5 views
0

私はJavaScriptクロージャでメガスレッドを読んでいますが、私が見つけた答えには多少の相違があるようですが、さらに明確になることを期待していました。クロージャは外側の機能を持たなければならないのですか、それとも外側のスコープだけを参照できますか?

スレッド内の回答の中には、内部関数が外部関数の変数を参照するときにクロージャが作成されることがあります。

私は、これはクロージャであると述べた別の答えが見つかりました:そこには、外側/内側の機能はありませんが、単純に一つの機能方法

var a = 42; 

function b() { return a; } 

お知らせ。人が与えた説明は、関数が外部スコープを参照するときにクロージャがあるということでした。

私の質問は、2つの関数(内側と外側)があるとき、または関数が外側のスコープを参照しているときにのみ作成されるクロージャーであり、関数でもそうでなくてもよい(この場合は単純にトップレベルの範囲)?

答えて

2

はい、クロージャは、外部スコープの変数を参照する関数 - any functionです。

しかし、ES6のクロージャが実際に関数スコープ(even if there was a block scope)とグローバルスコープのみを参照する前に、グローバルスコープでのクロージャは非常に退屈なものです(字句クロージャを持たない言語でも同じ動作をします)ので、クロージャのほとんどの例はネストされた関数を持ちます。

関連する問題