2015-06-21 68 views
0

早上好。Javascript致敬秀

請根據小時數顯示敬禮訊息。嘗試了這種自動初始化功能,它可以工作,但獨立於什麼時間,他顯示:「晚安」。我在做什麼錯了?誰能幫忙?

下面是代碼:

(function(){ 

    function saluteText() { 

     var d = new Date(); 
     var time = d.getHours(); 
     var divInnerHTML = document.querySelector('.name'); 

     if (time < 12) { 
      function addInnerHTML() { 
       divInnerHTML.innerHTML = 'Good morning!'; 
      } 
     } 
     else if (time >=12 && time <18) { 
      function addInnerHTML() { 
       divInnerHTML.innerHTML = 'Good evening!'; 
      } 
     } 
     else if (time >= 18 && time < 24) { 
      function addInnerHTML() { 
       divInnerHTML.innerHTML = 'Good night!'; 
      } 
     } 

     addInnerHTML(); 
    } 
    saluteText() 
})(); 
+0

爲什麼你有這些'addInnerHTML()'的功能呢?爲什麼不直接在每個if/else情況下設置innerHTML?如果你想有條件地定義一個函數,你需要在if/else塊之前聲明'var addInnerHTML;',然後在if/else中設置'addInnerHTML = function(){...}'。 – nnnnnn

回答

0

我認爲這是定義你的功能的問題。

當你在javascript中定義一個函數時,它被放在範圍之上。

您定義了三次函數,最後一次只顯示。即使您在If語句之間放置聲明,也會創建所有三個聲明。

您可以通過刪除最後一個功能來嘗試此操作,您將看到代碼顯示'晚上好'。

在這種情況下,解決問題的方法應該是這樣的方法:

function addInnerHTML(message) { 
    divInnerHTML.innerHTML = message; 
} 

if (time < 12) { 

    addInnerHTML('Good morning!'); 
} 
else if (time >=12 && time <18) { 

    addInnerHTML('Good evening!'); 
} 
else if (time >= 18 && time < 24) { 

    addInnerHTML('Good night!'); 
} 
+1

*「當你在javascript中定義一個函數時,它被放置在調用堆棧的頂部。」* - 調用堆棧?那是不對的。此外,您的解決方案現在定義了'addInnerHTML()'函數*四次。 – nnnnnn

+0

你是對的,我提交這個答案有點快。由於sumeet表示功能被掛起,所以我把這兩個弄糊塗了。當我有機會時,我會調整這個答案,謝謝。 – Pilatus