我看到了这个JavaScript测验:http://www.netfxharmonics.com/2008/01/NetFX-Harmonics-JavaScript-Quiz,但是我无法解决其中的问题:
(function(){
var a = 1;
var b = 2;
(function( ) { a = b; var b; })( );
console.log('a:'+ a); // => "a:undefined"
console.log('b:'+ b); // => "b:2"
})()
然而,如果你从内部函数中删除var b;
声明,那么a == 2
就像你期望的一样。
为什么会发生这种情况呢?
(你可以在这里测试:http://jsfiddle.net/gnhMZ/)
(function(){a=b; var b=3;})()
作为内部函数,另一个能够说明清楚的案例就是那将等同于(function(){var b; a=b; b=3;})()
,对吗? - Samvar
语句,然后返回该函数,那么闭包将包含该变量? - Samvar
在任何逐步代码之前被处理,2. 因为闭包引用变量对象,而不是单个变量。 - T.J. Crowder