2017-02-21 53 views
0

为什么下面的代码提供 '未定义' 内输出

(function(){ 
 
    console.log(1); 
 
    setTimeout (function(){console.log(2);},1000); 
 
    setTimeout (function(){console.log(3);},0); 
 
    console.log(4); 
 
})();

输出:

1 
4 
undefined 
3 
2 

为什么有一个未定义的输出?

+0

你在谷歌浏览器的控制台测试呢? –

+0

查看片段,除非您在其他地方记录其他内容,否则不存在“未定义”! –

+0

我在Chrome控制台中测试。 –

回答

2

这是因为函数的返回值是undefined。因此,它首先登录1,4,return value of function那么它将从setTimeout的

记录的值。例如

(function(){ 
    console.log(1); 
    setTimeout (function(){console.log(2);},1000); 
    setTimeout (function(){console.log(3);},0); 
    console.log(4); 
    return 'xyz' 

})(); 

输出将被

1,4,'xyz',3,2 
4

undefined是函数的返回值。如果您在浏览器控制台中执行此操作,它会打印未定义的内容,因为它会自动打印您的功能结果。

+0

我是指顶部的那个。 – Bigdragon

+0

@ LKTN.25有一个!它像'somevar =/*代码发布在问题* /;'所以它在技术上只是IIFE,其他人都包含在IIFE本身! –

5

如果你在浏览器本身的控制台做,那么当你CONSOLE.LOG它打印不确定的,看到这个线程:

Chrome/Firefox console.log always appends a line saying undefined

而且还有无数其他线程解释为什么出现这种情况。

如果这不是在控制台中,但在你的JS文件本身再有就是在你的代码别的东西别的地方是在做它

1

未定义的函数返回,你可以试试下面的代码:

(function(){ 
     console.log(1); 
     setTimeout (function(){console.log(2);},1000); 
     setTimeout (function(){console.log(3);},0); 
     console.log(4); 
     return 5; 
    })(); 
相关问题