【发布时间】:2013-01-31 07:01:38
【问题描述】:
我正在尝试通过学习如何使用闭包来扩展我的 JavaScript 技能水平。在下面的代码中,我想我会看到 console.log 输出从 3 倒数到 0。相反,我得到 -1、-1、-1、-1。
我知道我正在处理范围界定问题,但仅此而已。少了什么东西?这应该如何正确写,为什么?
function closure_count_test (number)
{
for (var x = 0; x <= number; x += 1)
{
setTimeout(function() {console.log(number - x);}, x * 1000);
}
}
closure_count_test(3);
【问题讨论】:
-
是的。只有一个变量
x。我给了-1,因为你知道问题是什么(与“关闭”和“范围”有关);因此应该能够找到副本。 -
因为您的回调中的
x引用了closure_count_test中的相同x。x的值是在你的回调被调用时获取的。 -
感谢大家的回复。多年来我一直使用 SO 作为资源,很高兴在我的第一篇文章中获得建设性的反馈。
标签: javascript closures