2010-02-04 96 views
3

如果你能向我解释为什么shout()一直被调用,尽管它被认为“消失”了,我会很高兴。Javascript函数不断被调用,虽然它的类是空的

var myclass = new Class({ 
myid: "greatidea", 
initialize: function(element) { 
    var shout = function() { alert(this.myid); }; 
    shout.periodical(5000, this); // test debug 
} 

});
x = new myclass();
alert(x);
x=null;
alert(x);

也看到这里http://mootools.net/shell/jhCBz/

基本上,我的想法:函数都有自己的注册,现在是独立谁把它称为对象。但我很乐意得到一个真实的解释。
谢谢。

回答

1

x持有对myclass的引用。 myclass正在执行shout。当您将x设置为null时,您刚刚摆脱了对myclass的引用,而不是myclass对象本身。

+0

非常感谢@jball。是否有另一种方法来停止函数调用(除了清除定时器)? – Nir 2010-02-04 19:12:08

+1

不,调用'$ clear'是我知道的唯一方法。 – jball 2010-02-04 19:48:34

+0

是的,即使定期参考是类的属性,它也会失败:http://mootools.net/shell/ZBrm7/1/ 即使您删除类本身,它也会继续。非常讨厌 - 但你可能必须编写一个.destroy()方法,其中$ clear(this.timer); – 2010-02-05 10:50:02

6

功能是总是独立。只要有一个函数的引用,它就会继续存在。在这种情况下,你的对象也是这样,因为你已经通过了一个对它的引用(通过this)到periodical()函数,该函数持有它的上下文。

相关问题