2017-08-01 6 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で最もよく議論されているトピックの1つです。 – 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がオブジェクトのnameプロパティにアクセスできるように、変数としてsetIntervalのグローバルコンテキストでこれを宣言していますか? – salehin

+0

はい、このような関数内の 'setInterval'も少し隠されています。これを処理するさまざまな方法がありますが、この質問でコールバックの使用を指摘したかっただけです。 –

関連する問題