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()
いません。