为什么下面的代码在输出中给出'undefined'

时间:2017-02-21 06:52:46

标签: javascript settimeout

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

输出:

1
4
undefined
3
2

为什么输出中存在未定义的内容?

4 个答案:

答案 0 :(得分:5)

如果您在浏览器本身的控制台中执行此操作,那么无论何时您在console.log中打印undefined,请参阅此主题:

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

还有无数其他线程解释了为什么会发生这种情况。

如果这不是在控制台中,而是在你的JS文件中,那么你的代码中的其他地方就会有其他的东西

答案 1 :(得分:4)

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

答案 2 :(得分: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

答案 3 :(得分:1)

undefined是函数返回,你可以尝试下面的代码:

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