検索

ホームページ  >  に質問  >  本文

javascript - 「ループ文部分が親スコープで、ループ本体内が別の子スコープ」ということをどう理解すればよいでしょうか?

そうです。

リーリー リーリー

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

リーリー

}

PHPzPHPz2845日前480

全員に返信(5)返信します

  • 我想大声告诉你

    我想大声告诉你2017-05-18 10:54:55

    まず、あなたはここにいます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
  • 迷茫

    迷茫2017-05-18 10:54:55

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

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

    返事
    0
  • 天蓬老师

    天蓬老师2017-05-18 10:54:55

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

    リーリー

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

    返事
    0
  • 世界只因有你

    世界只因有你2017-05-18 10:54:55

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

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

    返事
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-05-18 10:54:55

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

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

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

    返事
    0
  • キャンセル返事