为什么';这个javascript(jQuery)是否会进入无限循环?
我在上阅读了一篇关于绑定和解除绑定事件的伟大文章(因为我是一个使用jQuery的js初学者),我对这部分代码感到完全困惑(为了简洁起见简化了代码):为什么';这个javascript(jQuery)是否会进入无限循环?,jquery,javascript-events,loops,Jquery,Javascript Events,Loops,我在上阅读了一篇关于绑定和解除绑定事件的伟大文章(因为我是一个使用jQuery的js初学者),我对这部分代码感到完全困惑(为了简洁起见简化了代码): 为什么把同一个函数放在它自己里面,它不会一直执行到一个无限循环中?但是,它用于将事件重新绑定到元素 据我所知,你的例子会。但是,您的示例与您参考的网站上的示例不同 function addItemUnbind() { $('#list6 li.special button') .unbind('click') .bind('cl
为什么把同一个函数放在它自己里面,它不会一直执行到一个无限循环中?但是,它用于将事件重新绑定到元素 据我所知,你的例子会。但是,您的示例与您参考的网站上的示例不同
function addItemUnbind() {
$('#list6 li.special button')
.unbind('click')
.bind('click', function() {
var $newLi = $('<li class="special">special and new <button>I am new</button></li>');
$(this).parent().after($newLi);
addItemUnbind();
});
}
函数addItemUnbind(){
$(“#list6 li.special button”)
.unbind('单击')
.bind('单击',函数()){
var$newLi=$(“特殊与新我是新的” ”;
$(this).parent()在($newLi)之后;
addItemUnbind();
});
}
在本例中,当用户单击按钮时会调用“addItemUnbind”。因为该调用在内部函数中 例如,他在addItemUnbind()中做了一些事情,其中之一就是将一个函数绑定到一个按钮点击 然后声明此函数,例如在addItemUnbind()中有:
.bind('click', function() {
var $newLi = $('<li class="special">special and new <button>I am new</button></li>');
$(this).parent().after($newLi);
addItemUnbind();
}
.bind('click',function(){
var$newLi=$(“特殊与新我是新的” ”;
$(this).parent()在($newLi)之后;
addItemUnbind();
}
调用addItemUnbind()时,这里大括号内的代码不会计算,而是在单击时计算。答案隐藏在您取出的部分代码中。您发布的内容确实是一个无限循环。但是,下面是一个更完整(但仍然简化)的示例,从链接的博客文章中修改:
function addItemUnbind() {
bind('click', function() {
addItemUnbind();
});
}
对addItemUnbind的调用位于一个闭包内——一个新的匿名函数,它与创建它的addItemUnbind函数分离。对新函数的引用不是立即被调用,而是被传递到绑定函数中。因此,如果绑定函数看起来像这样:
function bind(eventName, eventHandler) {
eventHandler();
}
function bind(eventName, eventHandler) {
this.events[eventName] = eventHandler; // save the event handler to call when an event happens
}
然后会有一个无限循环,因为对eventHandler的调用会返回addItemUnblind
function bind(eventName, eventHandler) {
eventHandler();
}
function bind(eventName, eventHandler) {
this.events[eventName] = eventHandler; // save the event handler to call when an event happens
}
那就没问题了。它不调用addItemUnbind,它只是保存了一个函数的引用,以后会调用它。啊……就像很多事情一样……“观察丹尼尔!”。 诚然,在我认为事件处理工作的方式上也存在一种异常现象,这导致我在文章中略过了我认为我已经知道的内容。多亏了你仔细的解释,我现在看得很清楚了