猿问

请问setInterval里的代码为什么要用闭包?

代码如下:

function Dog() {
       this.wow = function() {
               console.log("Wow");
      }
       this.yelp = function() {
              this.wow();
       }
}

function MadDog(){
}

MadDog.prototype=new Dog();

MadDog.prototype.yelp=function(){
    var self=this;
    setInterval(function(){
        self.wow();
    },2000);
}

var test=new MadDog();
test.yelp();

就是:

    var self=this;
    setInterval(function(){
        self.wow();
    },2000);

部分,为什么要用闭包?

手掌心
浏览 481回答 3
3回答

慕运维8079593

setInterval第一个参数是function类型,支持eval(也就是传入方法名)。 如果不闭包:var self=this;setInterval(self.wow(),2000); 这就相当于var self=this;self.wow();setInterval(undefined,2000); 就达不到延迟2秒执行self.wow();的效果,且还会报错。 正确写法: 写法一:(setInterval的第一个参数如果不是需要重复调用,此方法更简洁,且不会造成过多对象污染) var self=this;setInterval(function(){self.wow();},2000); 写法二: var self=this; function a(){self.wow();}setInterval(a,2000);或setInterval('a',2000);
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答