2016-12-14 76 views
-2

爲什麼'Hello World'字符串不會打印到控制檯?
我希望函數在定時器啓動後返回值。在下面的JavaScript代碼中,爲什麼輸出未定義?

<script type="text/javascript"> 

    var obj = { 
     first(){ 
      window.setTimeout(function(){ 
       return 'Hello World'; 
      }, 0) 
     }, 

     second(){ 
      console.log(this.first()); 
     } 
    } 

    obj.second() 

    </script> 
+0

你必須從'第一'返回一個承諾這是正確的方式來做到這一點。 –

+1

返回類型回調函數不會影響方法返回值,您應該在第一個方法中返回一些值 – sai

+0

正如sai所說,函數(){return'Hello World';}'回調函數存在於完全不同於'first(){...}'的範圍,並且setTimeout是異步的,對first()的調用在沒有返回語句(未定義)的情況下解析。 –

回答

0

這是因爲setTimeOut是異步的。 second()函數不會等待setTimeOut的回調來完成返回值。你應該這樣做:

var obj = { 
     first(){ var _this = this; 
      window.setTimeout(function(){ 
       _this.second('Hello World'); 
      }, 0); 
     }, 

     second(text){ 
      console.log(text); 
     } 
    } 

    obj.first(); 
相關問題