2017-02-21 54 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; 
    })(); 
相關問題