Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript “为什么可以?”;在「;在JS中使用const? const arr=[1,2,3] 对于(设i=0;iconsole.log(i)); } 对于(var i,共[6,7]){ 捕获.push(()=>console.log(i)); } 为了(让我来看看[8,9]){ 捕获.push(()=>console.log(i)); } forEach(v=>v())在第一种情况下,循环变量发生变异(即,它存在于循环体范围之外)。在第二种情况下,为每个循环迭代提供了一个全新的i,因此不需要变异。FYIfor(const x of…还允许const循环变量。请尝试在for..inloop@spender谢谢,我明白了。他使用了var而不是const或let,var在最后一个元素3,所以输出必须是333,对吗? const arr = [1, 2, 3] for (let i = 0; i < arr.length; i++) { // can't use const console.log(i, arr[i]); } for (const i in arr) { // const is ok console.log(i, arr[i]); }_Javascript - Fatal编程技术网

Javascript “为什么可以?”;在「;在JS中使用const? const arr=[1,2,3] 对于(设i=0;iconsole.log(i)); } 对于(var i,共[6,7]){ 捕获.push(()=>console.log(i)); } 为了(让我来看看[8,9]){ 捕获.push(()=>console.log(i)); } forEach(v=>v())在第一种情况下,循环变量发生变异(即,它存在于循环体范围之外)。在第二种情况下,为每个循环迭代提供了一个全新的i,因此不需要变异。FYIfor(const x of…还允许const循环变量。请尝试在for..inloop@spender谢谢,我明白了。他使用了var而不是const或let,var在最后一个元素3,所以输出必须是333,对吗? const arr = [1, 2, 3] for (let i = 0; i < arr.length; i++) { // can't use const console.log(i, arr[i]); } for (const i in arr) { // const is ok console.log(i, arr[i]); }

Javascript “为什么可以?”;在「;在JS中使用const? const arr=[1,2,3] 对于(设i=0;iconsole.log(i)); } 对于(var i,共[6,7]){ 捕获.push(()=>console.log(i)); } 为了(让我来看看[8,9]){ 捕获.push(()=>console.log(i)); } forEach(v=>v())在第一种情况下,循环变量发生变异(即,它存在于循环体范围之外)。在第二种情况下,为每个循环迭代提供了一个全新的i,因此不需要变异。FYIfor(const x of…还允许const循环变量。请尝试在for..inloop@spender谢谢,我明白了。他使用了var而不是const或let,var在最后一个元素3,所以输出必须是333,对吗? const arr = [1, 2, 3] for (let i = 0; i < arr.length; i++) { // can't use const console.log(i, arr[i]); } for (const i in arr) { // const is ok console.log(i, arr[i]); },javascript,Javascript,为什么“for in”可以使用常量而“for”不能?您不能在第一个循环中使用const,因为i++将重新分配变量i 在In循环的中,i可以是常量,因为它是为每次迭代定义的。在arr中的常量元素中,元素与经典forloop中的常量元素=arr[i]中的元素相同。它是一个具有局部作用域的常量变量,因此在每次迭代中都会声明并销毁它。本文()中的一段引文说: “不过,在for…in或for…of循环中使用const怎么样? 奇怪的是,这看起来很有效 在深入检查这些类型的for循环后,似乎它们在每次迭代

为什么“for in”可以使用常量而“for”不能?

您不能在第一个循环中使用
const
,因为
i++
将重新分配变量
i


在In循环的
中,
i
可以是
常量,因为它是为每次迭代定义的。

在arr
中的
常量元素中,元素与经典forloop中的
常量元素=arr[i]
中的元素相同。它是一个具有局部作用域的常量变量,因此在每次迭代中都会声明并销毁它。

本文()中的一段引文说:

“不过,在for…in或for…of循环中使用const怎么样?

奇怪的是,这看起来很有效

在深入检查这些类型的for循环后,似乎它们在每次迭代中都会创建一个新的块范围。这意味着每个新索引实际上是一个新范围内的新变量&我们的常量永远不会被重新分配。”

这篇文章描述得很好:

根据我的评论:


在第一种情况下,循环变量发生变异(即,它存在于循环体范围之外)。在第二种情况下,为每个循环迭代提供了一个全新的
i
,因此不需要变异

但是,块作用域/函数作用域(
let
/
const
vs
var
)声明的选择对捕获的循环变量的处理方式有影响。运行下面的代码,注意使用
var
是如何导致大多数用户不期望的输出的

const captured=[];
对于(变量i=0;i<2;++i){
捕获.push(()=>console.log(i));
}
for(设i=2;i<4;++i){
捕获.push(()=>console.log(i));
}
for(常数i,共[4,5]){
捕获.push(()=>console.log(i));
}
对于(var i,共[6,7]){
捕获.push(()=>console.log(i));
}
为了(让我来看看[8,9]){
捕获.push(()=>console.log(i));
}

forEach(v=>v())
在第一种情况下,循环变量发生变异(即,它存在于循环体范围之外)。在第二种情况下,为每个循环迭代提供了一个全新的
i
,因此不需要变异。FYI
for(const x of…
还允许
const
循环变量。请尝试在
for..in
loop@spender谢谢,我明白了。他使用了
var
而不是
const
let
var
在最后一个元素
3
,所以输出必须是
333
,对吗?
const arr = [1, 2, 3]

for (let i = 0; i < arr.length; i++) { // can't use const
  console.log(i, arr[i]);
}

for (const i in arr) { // const is ok
  console.log(i, arr[i]);
}