我看到此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;})()'是一样的,那么,对吧? – Sam 2011-04-21 15:41:17
@Sam :(谢谢)完美,是的。就是这样。很好的例子。 – 2011-04-21 15:46:17
Wait..then这也意味着如果你有一个'var'语句** **函数,然后返回该函数,闭包将包含该var? – Sam 2011-04-21 15:48:52