(function(){
console.log(1);
setTimeout (function(){console.log(2);},1000);
setTimeout (function(){console.log(3);},0);
console.log(4);
})();
输出:
1
4
undefined
3
2
为什么有一个未定义的输出?
(function(){
console.log(1);
setTimeout (function(){console.log(2);},1000);
setTimeout (function(){console.log(3);},0);
console.log(4);
})();
输出:
1
4
undefined
3
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
undefined是函数的返回值。如果您在浏览器控制台中执行此操作,它会打印未定义的内容,因为它会自动打印您的功能结果。
我是指顶部的那个。 – Bigdragon
@ LKTN.25有一个!它像'somevar =/*代码发布在问题* /;'所以它在技术上只是IIFE,其他人都包含在IIFE本身! –
如果你在浏览器本身的控制台做,那么当你CONSOLE.LOG它打印不确定的,看到这个线程:
Chrome/Firefox console.log always appends a line saying undefined
而且还有无数其他线程解释为什么出现这种情况。
如果这不是在控制台中,但在你的JS文件本身再有就是在你的代码别的东西别的地方是在做它
未定义的函数返回,你可以试试下面的代码:
(function(){
console.log(1);
setTimeout (function(){console.log(2);},1000);
setTimeout (function(){console.log(3);},0);
console.log(4);
return 5;
})();
你在谷歌浏览器的控制台测试呢? –
查看片段,除非您在其他地方记录其他内容,否则不存在“未定义”! –
我在Chrome控制台中测试。 –