Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 访问自执行函数中的同级函数_Javascript_Function - Fatal编程技术网

Javascript 访问自执行函数中的同级函数

Javascript 访问自执行函数中的同级函数,javascript,function,Javascript,Function,我觉得我犯了一个很简单的错误。本质上,我只是试图从一个自执行函数中的另一个函数访问一个函数。有什么理由不调用printConfirmation吗?似乎EventHandler也不能正常工作 (function(){ var targetZone = document.getElementById('target-zone'); var eventHandlers = function(){ targetZone.addEventListener('click', printC

我觉得我犯了一个很简单的错误。本质上,我只是试图从一个自执行函数中的另一个函数访问一个函数。有什么理由不调用printConfirmation吗?似乎EventHandler也不能正常工作

(function(){

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

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

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

})();

这是一个提升问题,更改为函数声明而不是函数表达式,它将起作用:

(function(){

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

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

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

  eventHandlers();
})();

编辑:此外,正如Daniel指出的,您需要实际调用eventHandlers,而不是调用eventHandlers。谢谢。如果我像@daniel-a-white指出的那样调用EventHandler并执行它,这仍然是一个提升问题吗?函数表达式的提升方式与函数声明的提升方式不同。可能有一些浏览器允许这样做,但一般来说,您应该只在定义函数表达式之后调用它们。因为您在自执行函数作用域的末尾调用EventHandler,所以它应该同样工作良好,而不会将函数表达式转换为声明,对吗?