【发布时间】:2014-05-13 19:56:13
【问题描述】:
我有这段代码可以工作,但我想改进它:
var c = canvas.getContext("2d");
//this is called as an object method I created
var animar = function () {
var obj = this;//saves the object that called it to later access to its properties
var counter= 0;
var animacion = setInterval(function(){
c.save()
c.clearRect(0, 0, canvas.width, canvas.height);
c.rotate(0.1*counter);
obj.pintar();
c.restore();
counter++;
}, 50);
}
我想使用一个外部函数以备将来使用,但是当我更改我拥有的代码时,出现了一个提升问题,我不知道如何在不覆盖它的情况下获取 rotar() 函数内部的计数器一直:
var animar = function () {
var obj = this;
var counter= 0;
var animacion = setInterval(function(){
rotar(obj)
}, 50);
}
function rotar (obj) {
c.save()
c.clearRect(0, 0, canvas.width, canvas.height);
c.rotate(0.1*counter);
obj.pintar();
c.restore();
counter++;
}
我知道第一个有效,因为它们是嵌套的,而在第二个示例中则不是。如何在不使用全局变量的情况下为 setInterval 设置计数器? (我的意思是......如果我第二次调用它,它不会从 0 开始。如果我在 animar() 函数中将它设置为 0,它会起作用,但是我需要将它设置为 0在每个使用计数器或使用不同名称的计数器的函数中。这两种可能性听起来不太好。) 谢谢
【问题讨论】:
标签: javascript setinterval hoisting