我对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;一个函数"被移动到顶部(因为提升)导致类似第一个例子,事件调用没有工作?
答案 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;