gpt4 book ai didi

Javascript : global variable passed-by-reference on stored function

转载 作者:行者123 更新时间:2023-11-30 19:54:59 25 4
gpt4 key购买 nike

我得到了一些我无法理解的 javascript 解释器。
当变量在存储函数的参数中传递时,它似乎是通过引用传递的,而不是通过值传递的。

这里是 PoC:

var nb = 10;
var varfunc;

function myFunc(a) {
console.log("after = " + a);
}

console.log("before = " + nb);
varfunc = function() {
myFunc(nb)
};

nb = nb + 1;

varfunc();

我希望两个输出的值都是“10”。
当对“varfunc”变量执行“set”指令时,我如何实际传递“nb”值?

我在设置“onClick”属性时遇到了这个问题,我将一个函数与作为参数传递的全局变量链接起来:

var global_var = 0;
...
function oneFunction(){
var delImg = document.createElement("img");
delImg.src = "images/delete.gif";
delImg.onclick = function(){
deleteFG(global_var);
};
...
}
...
oneFunction();

当触发“onClick”事件时,将使用“global_var”的当前值调用“deleteFG()”函数,而不是处理“onClick”的设置指令时的值。

我通过创建一个临时变量找到了一个肮脏的解决方案:

var global_var = 0;
...
function oneFunction(){
var delImg = document.createElement("img");
delImg.src = "images/delete.gif";
var tmp_var = global_var;
delImg.onclick = function(){
deleteFG(tmp_var);
};
...
}
...
oneFunction();

有人可以解释一下吗? :)

最佳答案

I expected to have "10" value for both outputs.

首先,将 nb 更改为 11

然后调用 varfunc,它读取 nb 的值(您已经更改了)并将它 (11) 传递给 myFunc.

这与引用无关。


如果您想在创建函数时捕获值,则必须在那个时候将它复制到另一个变量。

您可以使用闭包来做到这一点(在本例中我使用 IIFE 创建闭包)。

var nb = 10;
var varfunc;

function myFunc(a) {
console.log("after = " + a);
}

console.log("before = " + nb);

varfunc = function(copy_of_nb) {
return function() {
myFunc(copy_of_nb);
};
}(nb);

nb = nb + 1;

varfunc();

console.log("finally = " + nb);

关于Javascript : global variable passed-by-reference on stored function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54096150/

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