そうです。
for (i = 0; i < 3; i ) {
}
学习是最好的投资!
まず、あなたはここにいますfor里面var i,它们是在同一个作用域的,因为var是一个函数作用域。i = 'abc';i++,这样i就变成NaN了。NaN和数字比较,无论是什么比较,都为false。したがって、出力は 1 回だけです。
for
var i
var
i = 'abc';i++
i
NaN
false
2 番目のものは let是块级作用域,所以在for (let i = 0; ...)定义的i只在for的括号里有效,在块内是没有效果的,所以let i = 'abc'是相当于重新定义了一个变量,是for代码块的块级作用域的变量,只在for コード ブロックで有効です。したがって、それは3回実行されました。
let
for (let i = 0; ...)
let i = 'abc'
3 番目の質問は、console.log之后定义了let i,所以i呼び出し時に定義しませんでした。上記の項目を参照してください。
console.log
let i
変数が改善されたからです
最初のものでは、外側の i が 'abc' に変更されるため、直接終了しますが、2 つ目では、'abc' は for のブロックレベルのスコープに制限されており、変更されません。
var 宣言を使用する場合 for(var i=0; iこうして見ると、より明白です コードの最初の部分は、次の理由で 1 回ループします:
コードの 2 番目の部分で let によって宣言された変数は、それらが配置されているブロックレベルのスコープでのみ有効になります。これらは、相互に影響しません。 {} i 内の定義は、() で宣言された i には影響しません
var は関数のスコープです。 2回目のループ判定ではi = 'abc'; , 而'abc'++ < 3が偽となるため、1回目のforループは1回だけ実行されます。
i = 'abc';
'abc'++ < 3
let はブロックレベルのスコープです。 for ループが i を再定義するたびに、let i = 'abc' のスコープはループ本体内にあり、ループ本体には影響しません。
ここを参照: http://www.ecma-international...
for の最初の部分が var (VariableDeclarationList) の場合、宣言された変数は、個別に宣言されたのと同じように、関数のスコープにマージされます。
forの最初の部分をletするとループはoldEnvとloopEnvに分割されますが、loopEnvはループ本体とループの外側に挟まれた中間層とみなせるので影響を受けません。
まず、あなたはここにいます
for
里面var i
,它们是在同一个作用域的,因为var
是一个函数作用域。i = 'abc';i++
,这样i
就变成NaN
了。NaN
和数字比较,无论是什么比较,都为false
。したがって、出力は 1 回だけです。2 番目のものは
let
是块级作用域,所以在for (let i = 0; ...)
定义的i
只在for
的括号里有效,在块内是没有效果的,所以let i = 'abc'
是相当于重新定义了一个变量,是for
代码块的块级作用域的变量,只在for
コード ブロックで有効です。したがって、それは3回実行されました。3 番目の質問は、
console.log
之后定义了let i
,所以i
呼び出し時に定義しませんでした。上記の項目を参照してください。変数が改善されたからです
最初のものでは、外側の i が 'abc' に変更されるため、直接終了しますが、2 つ目では、'abc' は for のブロックレベルのスコープに制限されており、変更されません。
var 宣言を使用する場合
リーリーfor(var i=0; iこうして見ると、より明白です
コードの最初の部分は、次の理由で 1 回ループします:
コードの 2 番目の部分で let によって宣言された変数は、それらが配置されているブロックレベルのスコープでのみ有効になります。これらは、相互に影響しません。 {} i 内の定義は、() で宣言された i には影響しません
var は関数のスコープです。 2回目のループ判定では
i = 'abc';
, 而'abc'++ < 3
が偽となるため、1回目のforループは1回だけ実行されます。let はブロックレベルのスコープです。 for ループが i を再定義するたびに、
let i = 'abc'
のスコープはループ本体内にあり、ループ本体には影響しません。ここを参照: http://www.ecma-international...
for の最初の部分が var (VariableDeclarationList) の場合、宣言された変数は、個別に宣言されたのと同じように、関数のスコープにマージされます。
forの最初の部分をletするとループはoldEnvとloopEnvに分割されますが、loopEnvはループ本体とループの外側に挟まれた中間層とみなせるので影響を受けません。