2017-03-16 116 views
0

我覺得我在這裏犯了一個非常簡單的錯誤。實質上,我只是試圖從自執行函數中的另一個函數訪問一個函數。 printConfirmation沒有任何理由不被調用?看起來eventHandlers也不能正常工作。在自動執行功能中訪問同級功能

(function(){ 

    var targetZone = document.getElementById('target-zone'); 

    var eventHandlers = function(){ 
    targetZone.addEventListener('click', printConfirmation); 
    }; 

    var printConfirmation = function(){ 
    targetZone = targetZone.classList; 
    targetZone.add('clicked'); 
    }; 

})(); 
+1

你沒有調用'eventHandlers'。 –

回答

1

這是一個提升的問題,改變函數聲明,而不是函數表達式,它會工作:

(function(){ 

    var targetZone = document.getElementById('target-zone'); 

    function eventHandlers(){ 
    targetZone.addEventListener('click', printConfirmation); 
    } 

    function printConfirmation(){ 
    targetZone = targetZone.classList; 
    targetZone.add('clicked'); 
    } 

    eventHandlers(); 
})(); 

編輯:此外,由於丹尼爾指出,實際上你需要調用eventHandlers()

+0

謝謝你。它是否仍然是一個懸而未決的問題,但是如果我將@ eventonderlers稱爲@ daniel-a-white指出並執行它? – Modermo

+0

函數表達式不會像函數聲明那樣被掛起。可能有一些瀏覽器允許它,但一般來說,只有在函數表達式被定義後才應該調用函數表達式。 –

+1

由於您在該自執行函數作用域的末尾調用'eventHandlers()',它應該同樣適用,不需要將函數表達式轉換爲聲明,對吧? –