使用 IIFE 的 Javascript 变量作用域

标签 javascript iife

我是 Javascript 的新手,并尝试使用 setTimeout 在 for 循环内遍历数组这是代码的一部分,所以默认情况下我有 100 毫秒。 我期望输出为 1、2、3,但它的所有打印都是未定义的 3 次。 如果有人可以帮我解释为什么会有帮助。

var allCars=['Car1','Car2','Car3'];
for(var i = 0; i < allCars.length; i++)
{
  (function(temp){  
  setTimeout(function(temp){
      console.log(allCars[temp]);
  },100)})(i);
}

最佳答案

setTimeout 不会将任何参数(除非您指定一个)传递给它的回调,但您指定了一个名为 temp 的参数,它隐藏了 temp 在外部范围内。

var allCars=['Car1','Car2','Car3'];
for(var i = 0; i < allCars.length; i++)
{
  (function(temp){  
  setTimeout(function(temp){    // This temp hides the temp on the line above
      console.log(allCars[temp]);
  },100)})(i);
}

只需从传递给 setTimeout 的回调中删除参数,即可让外部 temp 可见。

关于使用 IIFE 的 Javascript 变量作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33660044/

相关文章:

javascript - 如何在 Google 表格中包含多个单词的单元格中搜索特定单词并返回结果?

javascript - 如何使用 jquery 设置 data-url 属性的新值?

javascript - jQuery DataTable 日期范围搜索

javascript - 将对象与模块模式组合时我做错了什么

javascript - 为什么中缀增量运算符 (++) 不能用于 IIFE?

javascript - 如何使用phantomjs进行动态数据可视化截屏

javascript - 对 LoDash 的 debounce 方法的 maxWait 选项感到困惑

javascript - 使用绑定(bind)、调用和应用方法设置超时

javascript - 我的立即调用函数表达式有什么问题?

javascript - 为什么在iife中使用赋值运算符时 'this'指向 'window' obj?