事件监听器和js中的提升

时间:2018-01-29 03:07:04

标签: javascript jquery hoisting

我对js中的提升感到困惑。

我知道函数和变量都会移动到程序的顶部,但是像#34; listeners"会发生什么?

几天前我正在研究这样的事情:

function a(){
  //... 
  $("#myElement").trigger("click");
}

$("#myElement").on("click", function(){
  console.log("click!");
});

我意识到如果我在声明之前尝试引用一个事件,那么该引用将被忽略。

因此,在更改订单后,它起作用了:

$("#myElement").on("click", function(){
   console.log("click!");
});

function a(){
  //... 
  $("#myElement").trigger("click");
}

所以,我的问题是:为什么这个最后一个例子最终会起作用?#34;一个函数"被移动到顶部(因为提升)导致类似第一个例子,事件调用没有工作?

1 个答案:

答案 0 :(得分:2)

这完全取决于你何时致电a()。最后,您的事件处理程序只需在执行trigger()之前注册。通常,这会通过document.ready(...)解决。有关说明,请参阅jquery documentation



function a(){
  //... 
  $("#myElement").trigger("click");
}

$("#myElement").on("click", function(){
   console.log("click!");
});


a();

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="myElement"/>
&#13;
&#13;
&#13;