console.log(mytarget) 输出的不是200?
window.onload = function(){
var box1 = document.getElementById('box1');
box1.onmouseover = go(200);
}
function go(mytarget){
return function(mytarget){
console.log(mytarget); //输出的却是 mouseover clientX=43, clientY=100
}
}
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
return 的 function 别带参
return的function不需要mytarget这个参数,因为mytarget在上层作用域已经存在了,闭包返回的函数能直接访问,也就是自由变量。
因为你在return的function上加上了参数,又把这个function赋值给了事件函数,所以会把事件默认的参数带到函数中,这个参数便是你加的mytarget。
因为mytarget在更加里层的作用域中被覆盖了,所以console.log输出的便是事件带来的参数而不是200。
如果你既想带"200"这个参数,又想得到事件参数。把return的function的参数改一个名即可。
你return的那个function不是你在调用,是浏览器的JS在调用,第一个参数是浏览器在事件处理时传给你的,就是我们通常所说的event对象。你就算改成aaa,bbb,这是只是形参的名字而已,实参并没有变化。
修改的方法上面的hsfzxjy朋友已经说了