Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 这个JS IIFE是否正确地传递事件处理程序的事件和参数?_Javascript - Fatal编程技术网

Javascript 这个JS IIFE是否正确地传递事件处理程序的事件和参数?

Javascript 这个JS IIFE是否正确地传递事件处理程序的事件和参数?,javascript,Javascript,在回顾了一些关于如何将参数传递给事件处理程序的答案之后,我使用下面附带的IIFE实现了它 给定的处理程序代码只是用来演示变量传递的任意代码 代码似乎可以工作,但是我不能100%确定我是否正确地构造了闭包-我是否需要指定a和b作为返回函数(){..}的参数 let selectedElem = document.querySelector("#targetDiv"); let var1 = 0; let var2 = 10 selectedElem.addEventListener('click

在回顾了一些关于如何将参数传递给事件处理程序的答案之后,我使用下面附带的IIFE实现了它

给定的处理程序代码只是用来演示变量传递的任意代码

代码似乎可以工作,但是我不能100%确定我是否正确地构造了闭包-我是否需要指定
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))