如题。
으아악 으아악for (let i = 0; i < 3; i++) {
으아악}
我想大声告诉你2017-05-18 10:54:55
먼저 for
안에 var i
가 있습니다. var
가 함수 범위이기 때문입니다. i = 'abc';i++
이면 i
는 NaN
이 됩니다. NaN
을 숫자와 비교하는 것은 비교 내용에 관계없이 false
입니다. 따라서 한 번만 출력하십시오. for
里面var i
,它们是在同一个作用域的,因为var
是一个函数作用域。i = 'abc';i++
,这样i
就变成NaN
了。NaN
和数字比较,无论是什么比较,都为false
。所以,只输出一次。
第二个,let
是块级作用域,所以在for (let i = 0; ...)
定义的i
只在for
的括号里有效,在块内是没有效果的,所以let i = 'abc'
是相当于重新定义了一个变量,是for
代码块的块级作用域的变量,只在for
代码块里有效。所以执行了三次。
第三个问题,你在console.log
之后定义了let i
,所以i
let
는 블록 수준 범위이므로 for (let i = 0; ...)
에만 정의된 i
입니다. for
의 대괄호 내에서는 유효하지만 블록 내에서는 효과가 없으므로 let i = 'abc'
는 변수를 재정의하는 것과 동일합니다. 이는 for The
코드 블록의 블록 수준 변수는 for
코드 블록에서만 유효합니다. 그래서 세 번이나 처형되었습니다. 🎜
🎜세 번째 질문은 console.log
다음에 let i
를 정의했기 때문에 호출할 때 i
가 정의되지 않았다는 것입니다. 위 항목을 참조하세요. 🎜迷茫2017-05-18 10:54:55
변수가 개선되었기 때문이죠
첫 번째에서는 외부 i가 'abc'로 변경되어 직접 종료되는 반면, 두 번째에서는 'abc'가 for의 블록 수준 범위로 제한되어 변경되지 않습니다.
天蓬老师2017-05-18 10:54:55
var 선언을 사용할 때
for(var i=0; i<3; i++){}는 var i;for(i=0;i<3;i++){}와 동일합니다.
이렇게 보면 더 명확해집니다
첫 번째 코드 부분은 다음과 같은 이유로 한 번 반복됩니다.
두 번째 코드에서 let으로 선언된 변수는 해당 변수가 위치한 블록 수준 범위에서만 적용됩니다. 위 코드에서 ()와 {}는 두 개의 블록 수준 범위에 영향을 주지 않습니다. { The i inside } 정의는 ()
내부에 선언된 i에 영향을 주지 않습니다.世界只因有你2017-05-18 10:54:55
var은 함수 범위입니다. 두 번째 루프 판단에서는 i = 'abc';
이고 'abc'++ < 3
이 false이므로 첫 번째 for 루프는 한 번만 실행됩니다. i = 'abc';
, 而'abc'++ < 3
为false,所以第一个for循环只执行了一次。
let是块级作用域。每次for循环都重新定义了一个i,let i = 'abc'
let i = 'abc'
의 범위는 루프 본문 내에 있으며 루프 본문에 영향을 주지 않습니다. #🎜🎜#曾经蜡笔没有小新2017-05-18 10:54:55
참조: http://www.ecma-international...
for의 첫 번째 부분이 var(VariableDeclarationList)인 경우 선언된 변수는 별도로 선언된 것처럼 함수 범위에 병합됩니다.
for의 첫 번째 부분이 let되면 루프는 oldEnv와 loopEnv로 나뉘게 되며 loopEnv는 루프 본체와 루프 외부 사이에 끼어 있는 중간 레이어로 간주될 수 있으므로 영향을 받지 않습니다.