javascript - "루프 문 부분은 상위 범위이고 루프 본문 내부는 별도의 하위 범위입니다"를 이해하는 방법은 무엇입니까?
PHPz
PHPz 2017-05-18 10:52:55
0
5
472

如题。

으아악 으아악

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

으아악

}

PHPz
PHPz

学习是最好的投资!

모든 응답(5)
我想大声告诉你

먼저 for 안에 var i가 있습니다. var가 함수 범위이기 때문입니다. i = 'abc';i++이면 iNaN이 됩니다. 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가 정의되지 않았다는 것입니다. 위 항목을 참조하세요. 🎜
迷茫

변수가 개선되었기 때문이죠

첫 번째에서는 외부 i가 'abc'로 변경되어 직접 종료되는 반면, 두 번째에서는 'abc'가 for의 블록 수준 범위로 제한되어 변경되지 않습니다.

Peter_Zhu

var 선언을 사용할 때
for(var i=0; i이렇게 보면 더 명확해집니다
첫 번째 코드 부분은 다음과 같은 이유로 한 번 반복됩니다.

으아아아

두 번째 코드에서 let으로 선언된 변수는 해당 변수가 위치한 블록 수준 범위에서만 적용됩니다. 위 코드에서 ()와 {}는 두 개의 블록 수준 범위에 영향을 주지 않습니다. { The i inside } 정의는 ()

내부에 선언된 i에 영향을 주지 않습니다.
世界只因有你

var은 함수 범위입니다. 두 번째 루프 판단에서는 i = 'abc';이고 'abc'++ &lt 3이 false이므로 첫 번째 for 루프는 한 번만 실행됩니다. i = 'abc'; , 而'abc'++ < 3为false,所以第一个for循环只执行了一次。

let是块级作用域。每次for循环都重新定义了一个i,let i = 'abc'

let은 블록 수준 범위입니다. for 루프가 i를 재정의할 때마다 let i = 'abc'의 범위는 루프 본문 내에 있으며 루프 본문에 영향을 주지 않습니다. #🎜🎜#
曾经蜡笔没有小新

참조: http://www.ecma-international...

for의 첫 번째 부분이 var(VariableDeclarationList)인 경우 선언된 변수는 별도로 선언된 것처럼 함수 범위에 병합됩니다.

for의 첫 번째 부분이 let되면 루프는 oldEnv와 loopEnv로 나뉘게 되며 loopEnv는 루프 본체와 루프 외부 사이에 끼어 있는 중간 레이어로 간주될 수 있으므로 영향을 받지 않습니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿