Javascript:如何清除非全局(关闭)的setTimeout?

ame*_*ser 6 javascript timer settimeout javascript-namespaces

我正努力成为一个好公民,并尽可能地远离全球范围.有没有办法访问不在全局范围内的setTimeout变量?

那么,在这个例子中,有人会如何取消'计时器'?

myObject.timedAction = (function(){
    var timer;
        return function(){
            // do stuff

            // then wait & repeat       
            timer = setTimeout(myObject.timedAction,1000);
        };
})();
Run Code Online (Sandbox Code Playgroud)

我已经尝试过clearTimeout(myObject.timedAction.timer,1000);(没有成功),也不确定还有什么可以尝试.

小智 4

除非您有对 的引用,否则您不能timer这样做,但您没有引用,因为您将其声明为作用域中的变量。你可以这样做:

myObject.timedAction = (function(){
    return function(){
        // do stuff

        // then wait & repeat       
        myObject.timedAction.timer = setTimeout(myObject.timedAction,1000);
    };
})();

clearTimeout(myObject.timedAction.timer);
Run Code Online (Sandbox Code Playgroud)

请注意,上述代码只允许一个计时器。如果您需要引用多个计时器,则需要对其进行调整。