为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

手掌心 2018-12-07 10:48:15
代码如下: 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); 部分,为什么要用闭包?
查看完整描述

3 回答

?
慕运维8079593

TA贡献1876条经验 获得超5个赞

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);

查看完整回答
反对 回复 2018-12-24
  • 3 回答
  • 0 关注
  • 480 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信