2016-12-14 10 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

Вы должны вернуть обещание от 'first'. Это правильный способ сделать это. –

+1

return Тип функции обратного вызова не будет влиять на возвращаемое значение метода. Вы должны вернуть некоторое значение в первом методе – sai

+0

Это как говорит sai, функция 'function() {return 'Hello World';}' существует в полностью различающийся для 'first() {...}', и с setTimeout, являющимся асинхронным, вызов 'first()' разрешается без оператора return (undefined). –

ответ

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