在将函数添加到函数数组之前,将值存储在函数变量中的最佳(或良好)做法是什么?
比如我们有一个计数器:
var f_counter = 0;
...我们有一个函数数组:
var a_func = [];
当我们向数组添加一个函数时,我们可以这样做:
a_func.push(
function(){
examplecallbackfunction(f_counter);
}
);
f_counter++;
这里是示例回调函数:
function examplecallbackfunction(c) {
<... code ...>
}
遍历并执行函数数组:
var l = a_func.length;
while (l>0) {
var fnc=a_func[l-1];
fnc();
l--;
}
这里的问题是,当执行函数数组时,参数 f_counter 是当前全局变量 f_counter 的值,而不是将单个函数添加到函数数组时 f_counter 的值。
我需要一个良好的实践,在将 f_counter 的当前值分配给函数数组之前将其存储在函数定义中,并且在迭代和执行数组中的函数时,它应该例如使用存储的值调用回调函数.
我需要一种方法来做到这一点,而不需要将单个值存储在全局变量中,因为我根据用户交互加载异步内容,所以我永远不知道“提前”有多少函数和什么类型的函数将存储在函数中大批。有些函数可能有比 f_counter 更多的变量,等等......
最佳答案
将您的函数包装在一个函数中,该函数在被插入数组时执行。这将围绕该变量形成一个额外的闭包。现在闭包围绕全局变量,所以当函数实际执行时,该全局变量可能不是函数被插入循环时的样子。
这是您的代码,其中包含一个额外的函数;没有测试它,但你应该明白这个想法:
a_func.push(
(function(counter){
function() {
examplecallbackfunction(counter);
}
})(f_counter) //execute function immediately
);
f_counter++;
关于javascript - 在javascript中声明存储在函数数组中的函数时为变量赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22768717/