首页 > 解决方案 > 用于闭环的javascript

问题描述

我想我有点理解在 for 循环中var用于初始化时提升的概念和函数闭包的概念。i但是为什么下面的代码没有显示错误,因为最终值为i4 并且arr[3]是 的最高索引arr

为什么iin没有arr[i]链接到ifor 循环中声明的:var i = 0这个问题的重点是理解概念而不是获得解决方案

var arr = [1, 2, 3, 4];

for (var i = 0; i<arr.length; i++){
  console.log(arr[i])
}

与此相比,输出显示i(即3)的最终值三倍。我知道let应该在这里使用

var funcs = [];
for (var i = 0; i < 3; i++) { 
  funcs[i] = function() { 
    console.log("My value: " + i); 
  };
}

for (var j = 0; j < 3; j++) {
  funcs[j]();
}

标签: javascriptfor-loopclosures

解决方案


在第一个片段中,最大值为 4,但最大数组索引为 3 由于您的循环使用数组索引长度作为最大值,因此它不会超出最大索引。

要理解第二个示例,您需要了解 和 之间的var区别let

最基本的解释是var它的直接函数体(在你的情况下,在循环之外,与数组for相同的范围),而在外壳内(循环内),它基本上会在循环的每次迭代中创建一个新变量,同时重用相同的变量。funcsletforvar


推荐阅读