不理解JavaScript代码中的回调函数
Not understanding callback function in JavaScript code
我是从一本JavaScript书中学习的,我想使用回调函数创建一些菜单,并智能地使用事件处理。我有一些代码看起来像这样:
window.onload = InitPage;
function InitPage(){
function hoverMenu(e, oTarget){
var isChildOf = function(pNode, cNode){
//alert("value of pNode:" + pNode + " value of cNode" + cNode);
if(pNode === cNode){
return true;
}
while (cNode && cNode !== pNode){
cNode = cNode.parentNode;
}
return cNode === pNode;
}
//alert(e.srcElement);
var target = e.target;
if(!oTarget){
oTarget = target;
}
var relTarg = e.fromElement;
if(isChildOf(oTarget, relTarg) == false){
alert("mouse enters");
}
}
function unhoverMenu(e, oTarget){
var isChildOf = function(pNode, cNode){
//alert("value of pNode:" + pNode + " value of cNode" + cNode);
if(pNode === cNode){
return true;
}
while (cNode && cNode !== pNode){
cNode = cNode.parentNode;
}
return cNode === pNode;
}
//alert(e.srcElement);
var target = e.target;
if(!oTarget){
oTarget = target;
}
var relTarg = e.toElement;
if(isChildOf(oTarget, relTarg) == false){
alert("mouse leaves");
}
}
var ul_menu = document.getElementById("ul_grabbed");
ul_menu.addEventListener("mouseover", function(e1){return function(e){hoverMenu(e, e1)}}(ul_menu),true);
ul_menu.addEventListener("mouseout", function(e1){return function(e){unhoverMenu(e, e1)}}(ul_menu),true);
我已经完成了代码。这里本质上发生的是当鼠标进入UL元素或其子元素时的触发事件,以及离开该UL或其子对象时的触发的事件。我很难理解这里显示的除了最后一部分之外的所有内容:
ul_menu.addEventListener("mouseover", function(e1){return function(e){hoverMenu(e, e1)}}(ul_menu),true);
ul_menu.addEventListener("mouseout", function(e1){return function(e){unhoverMenu(e, e1)}}(ul_menu),true);
我对这些行的理解是,我们正在向UL元素添加一个具有两个功能的事件,一个从第一个内部返回,这将在事件的捕获阶段启动。我的问题是,为什么我在这些函数的末尾需要(ul_menu)
,并且有e1
和e
,这是否意味着这里实际上触发了两个不同的事件?如果有人能向我解释最后两行,我将不胜感激
这是一个返回函数的自执行函数,也是将额外参数传递到事件处理程序的一种方式。如果你采取外层
function(e1){ ... }(ul_menu)
--然后你会看到你立即取回{…}容器内的东西,这就是:
function(e) { hoverMenu(e, ul_menu); }
这就是事件处理程序。因此,e是事件,但现在额外的参数(在本例中为"target")ul_menu被传递给您的"hoverMenu"处理程序。
相关文章:
- JavaScript回调函数
- 如何在回调函数中执行流
- 回调函数中传递参数的困难(Google Map API Markers)
- 如何正确地将参数传递给RequireJS回调函数
- 回调函数在python代码中离线
- 从AJAX回调函数中分离数据
- 赋值后的回调函数
- 如何在javascript回调函数中返回多个变量
- 函数表达式,返回回调函数
- 等待回调函数执行
- JavaScript回调函数和Google Feed API
- 如何从ajax成功回调函数中读取javascript变量
- 正在保存JavaScript内部回调函数中的值
- 有没有什么方法可以停止Jquery中的animate(也可以停止完整的回调函数)
- 如何在javascript中添加带有回调函数的按钮点击事件作为window.conf
- 在Golang回调函数中启用CORS
- 在初始函数完成之前调用回调函数
- jQuery Mobile:如何在$.Mobile.changePage之前运行回调函数
- 即使使用回调函数也无法返回值
- 为什么prototypjs观察到回调函数有绑定