2017-08-01 45 views
0

此问题来自公司的书面测试。它看起来很混乱。我以为它会打印任何this.name设置。当我键入代码时,它什么也没有显示。我对闭包知之甚少,我认为这与问题有关。我想在这里解释一下。对象功能没有输出

function dd(name) { 
 
    this.name = name; 
 
    this.go = function() { 
 
    setInterval(function() { 
 
     return this.name; 
 
    }, 2000) 
 
    } 
 
} 
 
var tt = new dd("corolla"); 
 
tt.go()

+0

这是JavaScript中最受好评的过度讨论话题之一。 – meagar

回答

0

你不能用这种方式得到setInterval的返回值。有一个回调尝试如下面的代码片段

function dd(name) 
 
{ 
 
    this.name=name; 
 
    console.log(name); 
 
    var _this = this; 
 
    this.go=function(cb) 
 
    { 
 
    setInterval(function() { 
 
     cb(_this.name); 
 
    },1000) 
 
    } 
 
} 
 
var tt=new dd("corolla"); 
 
tt.go(function(ret) { 
 
    console.log(ret); 
 
})

而且,请注意,里面setIntevalthis值是不一样的水獭功能。这就是为什么var _this=this;

+0

哦,我现在明白了。但不得不说这很奇怪。如果我正好在setInterval里面,这通常指的是窗口对象。所以我实际上在setInterval的全局上下文中声明了这个作为变量,以便setInterval可以访问对象的名称属性,对吧? – salehin

+0

是的,像这样的函数中的'setInterval'有点太'隐藏'了。处理这个问题有不同的方法,我只想指出在这个问题中使用回调。 –

相关问题