js 回调函数传参

问题描述

想要给回调函数传递一个全局变量的参数,虽然知道可以直接访问,不用传参,但是想试一下,没想到出了问题,在回调函数中找不到传递过来的参数

相关代码

var temp = {};
temp.index = 0;
document.getElementById('d').addEventListener('click', function (e, temp) {
  console.log(temp);
  move(e, temp);
}, false)
function move(e, obj) {
  obj.index = 2;
}

结果

clipboard.png

问题

不明白为什么全局变量传参这种方法在回调函数中会找不到

阅读 6k
4 个回答

clipboard.png
人家只接受一个入参,你传入两个岂不是为难人家

使用闭包

addEvent.addEventListener('click',log('绑定事件'))
function log(msg){
    return function(e){
       console.log(msg)
       //to do
    }
}

函数传参有两步,第一步是声明函数的时候先声明参数,第二步是函数调用的时候传递过去,这两步才是完整的一个函数传参过程

function a(x,y)(consoel.log(x,y));
a(1); // 1 undefined

上面事件绑定是你传递了一个掺有temp参数的匿名函数给事件回调,但是,事件执行后,回调函数的执行是浏览器或者说引擎来操作的,他并没有把temp对应的参数传过来,所以你接收不到。你所能操作的是下面的move函数

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题