【发布时间】:2016-02-12 18:13:29
【问题描述】:
我正在阅读一本关于 Javascript 的书,并尝试了其中的一个闭包示例。
function animateIt(id) {
var elem= document.getElementById(id);
var tick=0;
var timer=setInterval(function() {
if (tick<100) {
elem.style.left = tick+"px";
elem.style.top=tick+"px";
tick++;
} else {
clearInterval(timer);
assert(tick==100, "Tick Accessed and has value:- "+ tick);
assert(elem, "element accessed");
assert(timer, "timer accessed")
}
}, 10);
}
animateIt(box);
但是 timer 中的函数无法访问 elem、tick 等,而书上说它应该可以访问它们。 请告诉我。
【问题讨论】:
-
box定义在哪里? -
“不能访问 elem、tick 等” 你怎么知道你不能访问它们?您是否在控制台上收到错误说它们不存在?我在代码中看到的唯一问题是它可能在
id标识的元素存在之前运行,所以elem最终会成为null -
@Oriol 应该用
console.assert代替assert吗?传递给assert的第一个参数也应该是Booleandeveloper.mozilla.org/en-US/docs/Web/API/console/assert 吗? jsfiddle.net/r2u5r8f9/1 -
@guest271314 是的,对
assert的调用会抛出,但这并不重要。我的意思是动画作品。
标签: javascript closures