Javascript 这个JS IIFE是否正确地传递事件处理程序的事件和参数?
在回顾了一些关于如何将参数传递给事件处理程序的答案之后,我使用下面附带的IIFE实现了它 给定的处理程序代码只是用来演示变量传递的任意代码 代码似乎可以工作,但是我不能100%确定我是否正确地构造了闭包-我是否需要指定Javascript 这个JS IIFE是否正确地传递事件处理程序的事件和参数?,javascript,Javascript,在回顾了一些关于如何将参数传递给事件处理程序的答案之后,我使用下面附带的IIFE实现了它 给定的处理程序代码只是用来演示变量传递的任意代码 代码似乎可以工作,但是我不能100%确定我是否正确地构造了闭包-我是否需要指定a和b作为返回函数(){..}的参数 let selectedElem = document.querySelector("#targetDiv"); let var1 = 0; let var2 = 10 selectedElem.addEventListener('click
a
和b
作为返回函数(){..}
的参数
let selectedElem = document.querySelector("#targetDiv");
let var1 = 0;
let var2 = 10
selectedElem.addEventListener('click', ( (e, a, b) => {
return function(e) {
console.log(e, a, b);
a += b;
console.log(a);
};
})(this.event, var1, var2));
否,您没有正确传递事件。在IIFE中创建处理程序时,没有当前事件,全局
this.event
应该是未定义的。您甚至没有使用IIFE的e
参数,因为您使用的是实际处理程序的e
参数。您不需要外部e
,只需将其放下:
let selectedElem = document.querySelector("#targetDiv");
let var1 = 0;
let var2 = 10
selectedElem.addEventListener('click', ((a, b) => (e) => {
console.log(e, a, b);
a += b;
console.log(a);
})(var1, var2));
是什么让你认为你需要这样的生活?你也有指定的参数
a
和b
。。。这些是a
=0,b
=10。。。你是否需要它们取决于你需要什么。。如果你把它们放进你的构造函数中,然后把它们传递出去。我想你这样做只是因为你不想污染全局范围。这很好,就我所知,这应该很好。尽管我确实觉得有点困惑-我认为如果您在调用selectedElem.addEventListener
的整个过程中都使用IIFE,而不是仅仅使用IIFE来创建回调函数,这会更容易理解。)无论如何,如果您不能100%确定是否正确执行了该操作,你测试过它并查看了控制台中的内容吗?@Adriani6啊,我想用变量名替换它们,我现在就编辑这个问题。@NikKyriakides-我知道我可以有一个单独的处理程序构造函数,如果这是你的意思的话?我用的是一种生活,因为我觉得它更包容。否则,我认为有必要在不依赖全局变量的情况下将参数传递给处理函数?谢谢,我觉得我遗漏了一些东西。顺便说一句,我想你在回答中漏掉了最后一个)
(…})(var1,var2))代码>