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
。这是否意味着闭包绑定到变量名而不是引用或符号表索引或更机器级别的东西?我希望从 e 词法作用域闭包中抛出一个错误,因为原来s
的被删除了。新的s
只是重用了这个名字,和原来的没有任何关系s
。
第三,s
匿名函数作用域内部不被 使用f()
,这是否意味着词法作用域确实在起作用?