【发布时间】:2011-12-29 15:21:14
【问题描述】:
我很好奇为什么会这样:
function doThis(){
counter = 0;
return counter;
};
console.log(counter); // returns "reference error: can't find variable"
这是有道理的,因为变量不存在于函数之外。但是,如果我创建一个自己执行的函数:
(function doThis(){
counter = 0;
return counter;
})();
console.log(counter); // returns 0
变量counter怎么还存在?不是闭包,好像没有从外部引用这个变量,所以不应该被垃圾回收销毁吗?
【问题讨论】:
-
未声明的变量隐式成为全局变量......所以在你的第二个例子中,函数执行后,
counter是一个全局变量...... -
请注意,在严格模式下,对未声明变量的赋值会引发引用错误。因此,您应该始终事先声明您的变量。
标签: javascript function closures scope