使用for for循环时,这两个选项均允许并起作用:
const numbers = [1,2,3];
// works
for(let number of numbers) {
console.log(number);
}
// also works
for(const number of numbers) {
console.log(number);
}
我总是使用const
,因为我在任何情况下都不会改变number
变量,但是当我在其他人的代码中看到for...of
循环时,通常会使用{{1} }。也许let
有一个我没有看到的缺点?浏览器错误?
为什么在const
循环中使用const
以及何时使用let
?
答案 0 :(得分:3)
在没有修改循环体中的值并了解const / let的即使是经验丰富的开发人员/教程制造商中,for(let i
而不是for(const i
的普遍原因也很简单。
许多人将const视为永远不变的“常数”。曾经。 (当然,它永远不会改变)。但是他们进一步感到尴尬“用相同的名称重新定义多个常量”。例如,将const server = 'fun.example.com'
放在一个位置,将const server = 'boring.example.com'
放在另一个位置将是“令人反感的”。
循环中的变量(至少在JavaScript基于的大多数类似C的语法语言中)是更改MOST的变量。在所有for循环中,没有什么比它的i值变化多的了。 “ i”通常最终是CPU本身(而不是RAM)中的“寄存器变量”,因此它可以“更快地更改”。自从它以'var'开始以来,在JavaScript中甚至都是如此,当您执行简单的for(let i=0;i<50;i++)
时仍然如此。即for(const i=0;i<50;i++)
会引发错误。
因此,当您遍历列表和for(const i
时,您可能开始看到每秒可能更改(或重新定义)数千次的“ i”之间的不一致。因此,for(const i...
像i
的“外观”或“感觉”将永远只有分配的第一个值。说const i..
似乎是错误的,在下一行代码中,i
每次“通过循环”时都可能是完全不同的值。而且,即使您“知道”您正在“为循环中的每次运行都重新定义它”,对于某些开发人员来说,这本身也是个问题。
由于这个原因,许多开发人员更喜欢在JavaScript中将const
保留为“一次定义的值,并在整个”程序执行过程”中或至少在“类中的所有内容”中代表单个值。
因此,“标题”(我应该使用)中问题的答案可能是“因为您有理由并且对您有意义,因此请继续使用const”。我在这里也回答了您对“为什么要这样做(让我如此常见”)的疑问的答案。对于某些人,他们只是习惯for(let
,因为它既适用于“ for循环”又适用于对于其他人,这是一个有意识的选择,因为他们不喜欢一遍又一遍地“重新定义const”。
我会谦虚地建议,如果您确实使用const
,请不要在{item”中使用i
,因为i与一个递增的整数变量相关联。至少如果您使用诸如item之类的好名字,将其视为仅存在一次的单个事物会更舒服。我谦虚地建议,如果您使用'let',出于相同的原因,也不要使用let i of
。 i
仅用于实际增加的项目。即使用for(让项目项)或for(让i = 0; i
答案 1 :(得分:2)
为什么在
const
循环中使用let
以及何时使用for...of
?
如果循环主体中没有分配给标识符,则基本上使用样式是使用let
还是const
。
如果希望循环主体中的标识符为只读,请使用const
(例如,如果有人稍后修改代码以添加分配,则在严格模式下这是一个主动错误)。如果要分配给let
,请使用for-of
(因为您的代码中有分配,或者希望某人以后可以添加一个而不更改声明)。
您可以使用for-in
和for
循环来做到这一点。 for
循环的控制变量不能为常量,因为它在"use strict";
for (let str of ["a", " b", " c "]) {
str = str.trim();
// ^^^^^----- assignment to the identifier
console.log(`[${str}]`);
}
循环的“ update”子句中进行了修改。
为清楚起见,这是一个在循环体内分配的示例:
const
如果在以上str
中使用"use strict";
for (const str of ["a", " b", " c "]) {
str = str.trim();
// ^^^^^----- Error
console.log(`[${str}]`);
}
,则会出现错误:
-E
答案 2 :(得分:0)
答案 3 :(得分:0)
我认为for内的const不是必需的,例如,当变量在for内不变时使用const。
let tmp = 0;
for(const num of numbers){
tmp += num;
}
如果必须修改变量,可以使用let
for(let num of numbers){
num += 5;
}
但是我更喜欢使用此正弦波的数组
numbers.forEach(num => {
console.log(num)
});