javascript - 在javascript中声明存储在函数数组中的函数时为变量赋值

标签 javascript arrays function

在将函数添加到函数数组之前,将值存储在函数变量中的最佳(或良好)做法是什么?

比如我们有一个计数器:

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/

相关文章:

javascript - 如何使用jquery在另一个html字段上显示多个下拉值

javascript - Javascript 中的正则表达式用于测试各种日期

javascript - 修复了移动 safari 网站上带有文本字段的标题

javascript - 如何将这些数组值全部打印成 html 表单?

c++ - 如何从返回 vector 的函数中获取 vector 值?

javascript - 将oauth与Electron结合使用时出现问题

c - 将任何数组类型传递给 C 中的函数

arrays - 如何判断一个数组是否包含一个字符串

string - 如何在 F90 中编写 to_upper() 或 to_lower() 函数?

c++ - 在 C/C++ 中通过指针调用函数时,编译器如何正确处理 ABI?