Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/426.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在下面的javascript代码中,为什么输出是未定义的?_Javascript_Return Value_Settimeout - Fatal编程技术网

在下面的javascript代码中,为什么输出是未定义的?

在下面的javascript代码中,为什么输出是未定义的?,javascript,return-value,settimeout,Javascript,Return Value,Settimeout,为什么“Hello World”字符串未打印到控制台? 我希望函数在计时器启动后返回值 <script type="text/javascript"> var obj = { first(){ window.setTimeout(function(){ return 'Hello World'; }, 0) }, second(){

为什么“Hello World”字符串未打印到控制台?
我希望函数在计时器启动后返回值

<script type="text/javascript">

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

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

    obj.second()

    </script>

var obj={
第一(){
setTimeout(函数(){
返回“你好,世界”;
}, 0)
},
第二(){
log(this.first());
}
}
第二个目标()

这是因为
setTimeOut
是异步的。
second()
函数不会等待
setTimeOut
的回调完成以返回值。你应该这样做:

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

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

    obj.first();

您必须从
first
返回一个承诺,这是正确的方法。回调函数中的返回类型不会影响方法返回值,您应该在第一个方法中返回一些值。正如sai所说,
function(){return'Hello World';}
回调存在于与
first(){…}完全不同的范围内
,并且setTimeout是异步的,对
first()
的调用在没有返回语句(未定义)的情况下解析。