2017-03-16 83 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()',它应该同样适用,不需要将函数表达式转换为声明,对吧? –