javascript - 可能是闭包中的一个小问题????
PHP中文网
PHP中文网 2017-04-11 13:06:31
[JavaScript讨论组]

为什么下面 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 } }
PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(3)
黄舟

return 的 function 别带参

高洛峰
  1. return的function不需要mytarget这个参数,因为mytarget在上层作用域已经存在了,闭包返回的函数能直接访问,也就是自由变量。

  2. 因为你在return的function上加上了参数,又把这个function赋值给了事件函数,所以会把事件默认的参数带到函数中,这个参数便是你加的mytarget。

  3. 因为mytarget在更加里层的作用域中被覆盖了,所以console.log输出的便是事件带来的参数而不是200。

如果你既想带"200"这个参数,又想得到事件参数。把return的function的参数改一个名即可。

ringa_lee

你return的那个function不是你在调用,是浏览器的JS在调用,第一个参数是浏览器在事件处理时传给你的,就是我们通常所说的event对象。你就算改成aaa,bbb,这是只是形参的名字而已,实参并没有变化。

修改的方法上面的hsfzxjy朋友已经说了

    function go(){ // 这里去掉mytarget,防止重新赋值造成影响
        return function(mytarget){
            console.log(mytarget);clientY=100
        }
    }
    
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号