在下面的javascript代码中,为什么输出是未定义的?
为什么“Hello World”字符串未打印到控制台?在下面的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(){
我希望函数在计时器启动后返回值
<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()
的调用在没有返回语句(未定义)的情况下解析。