2017-08-01 80 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'有點太'隱藏'了。處理這個問題有不同的方法,我只想指出在這個問題中使用回調。 –

相關問題