javascript - 「ループ文部分が親スコープで、ループ本体内が別の子スコープ」ということをどう理解すればよいでしょうか?
PHPz
PHPz 2017-05-18 10:52:55
0
5
470

そうです。

リーリー リーリー

for (i = 0; i < 3; i ) {

リーリー

}

PHPz
PHPz

学习是最好的投资!

全員に返信(5)
我想大声告诉你

まず、あなたはここにいます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呼び出し時に定義しませんでした。上記の項目を参照してください。

いいねを押す +0
迷茫

変数が改善されたからです

最初のものでは、外側の i が 'abc' に変更されるため、直接終了しますが、2 つ目では、'abc' は for のブロックレベルのスコープに制限されており、変更されません。

いいねを押す +0
Peter_Zhu

var 宣言を使用する場合
for(var i=0; iこうして見ると、より明白です
コードの最初の部分は、次の理由で 1 回ループします:

リーリー

コードの 2 番目の部分で let によって宣言された変数は、それらが配置されているブロックレベルのスコープでのみ有効になります。これらは、相互に影響しません。 {} i 内の定義は、() で宣言された i には影響しません

いいねを押す +0
世界只因有你

var は関数のスコープです。 2回目のループ判定ではi = 'abc'; , 而'abc'++ < 3が偽となるため、1回目のforループは1回だけ実行されます。

let はブロックレベルのスコープです。 for ループが i を再定義するたびに、let i = 'abc' のスコープはループ本体内にあり、ループ本体には影響しません。

いいねを押す +0
曾经蜡笔没有小新

ここを参照: http://www.ecma-international...

for の最初の部分が var (VariableDeclarationList) の場合、宣言された変数は、個別に宣言されたのと同じように、関数のスコープにマージされます。

forの最初の部分をletするとループはoldEnvとloopEnvに分割されますが、loopEnvはループ本体とループの外側に挟まれた中間層とみなせるので影響を受けません。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート