gpt4 book ai didi

javascript - JS 将参数作为变量传递给匿名函数,稍后再调用 -> 参数值问题

转载 作者:行者123 更新时间:2023-11-29 17:30:15 25 4
gpt4 key购买 nike

我在使用作为变量传递的参数调用匿名函数时遇到问题。如果我在将一个变量作为参数传递给它之后将匿名函数保存到一个数组中,然后我更改变量并调用该函数,它会打印变量的最后一个值,而不是我推送匿名函数时变量的值进入我的阵列。我在以下示例中简化了我的代码:

var arr = [];

function myFunction(index) {
alert(index);
}

function doPush() {
var k = 'hello';

var f = function(){myFunction(k);};

arr.push(f);

k = 'goodbye';
}

function invoker(op) {
op();
}

function invokePushed() {
invoker(arr[0]);
}

doPush();
invokePushed();

好吧,invokePushed(); alert 'goodbye' 而不是 'hello'.. 我的目标是将几个函数存储到数组中并按顺序调用它们,但这样我数组中的所有函数都具有相同的(最后一个)参数值。

我知道我可以通过将函数的字符串表示形式插入数组来解决这个问题:

var f = 'myFunction(\''+k+'\');';

并在调用函数中用eval调用,但我希望使用第一种方法。

这可能吗?

谢谢,

亚历山德罗。

最佳答案

您必须创建一个新范围,其中捕获 k 的当前值。 JavaScript 只有函数作用域,因此您可以使用立即函数 执行此操作:

var f = (function(value) {
return function(){myFunction(value);};
}(k));

您可以通过创建一个生成匿名函数的命名函数来使其更具可读性:

function getFunction(value) {
return function(){myFunction(value);};
}

// later

var f = getFunction(k);

关于javascript - JS 将参数作为变量传递给匿名函数,稍后再调用 -> 参数值问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4967261/

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