gpt4 book ai didi

javascript - 按值传递而不是引用 JavaScript 闭包 - 任何非包装技术?

转载 作者:行者123 更新时间:2023-11-30 08:04:51 28 4
gpt4 key购买 nike

通过引用传递给闭包的变量。这段代码:

var figs = ['circle', 'square'];
for (var i in figs) {
var fig = figs[i];
document.getElementById(fig).addEventListener("click", function(e) {
console.log(fig);
}, false);
}

即使您点击(正方形fig 变量的最后一个值),也始终记录最后一个数组元素。

为了绑定(bind) fig 变量的实际值,我在函数调用中使用了包装(因此中间闭包保持循环值):

var figs = ['circle', 'square'];
for (var i in figs) {
var fig = figs[i];
document.getElementById(fig).addEventListener("click", (function(fig) {
return function(e) {
console.log(fig);
}
})(fig), false);
}

是否可以避免包装函数以按值传递?

更新相关问题和答案:

最佳答案

不,这是不可能的。

但是,您可以通过将生成内部函数的代码从循环中取出来使您的代码更好一些:

var figs = ['circle', 'square'];
function createFigHandler(fig) {
return function(e) {
console.log(fig);
}
}

for (var i = 0; i < figs.length; i++) {
var fig = figs[i];
document.getElementById(fig).addEventListener("click", createFigHandler(fig), false);
}

jsFiddle

关于javascript - 按值传递而不是引用 JavaScript 闭包 - 任何非包装技术?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19909656/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com