(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控制檯中測試。 –