function f() { return s; } // works fine though no `s` is defined yet !
var s=1;
f(); // 1
delete s;
var s=2;
f(); // 2
(function() {
var s=3;
f(); // 2 and not 3 which means lexical scoping is at play (?)
})();
sまず、まだ定義されていない変数 ( ) を閉じることができます。レキシカル(静的)スコープが使用されている場合、それはどのように可能ですか?
s次に、元のを削除した後f()、新しい を見つけることができますs。これは、クロージャが参照やシンボル テーブル インデックスなどではなく、よりマシン レベルのものではなく、変数名にバインドされていることを意味しますか? sオリジナルが削除されているため、レキシカルスコープクロージャーからエラーがスローされると予想されます。新しいsは名前を再利用するだけで、元の とは何の関係もありませんs。
そして第三に、s無名関数のスコープ内は によって使用されてf()いません。