2016-12-09 1 views
13

const이 for-loops에서 작동하지 않는 이유는 무엇입니까? 우리는 새로운 범위를 만들고 그것에 값을 복사해야합니다. 그래서 이것은 날지 않을 것이다.JavaScript에서 일부 for-loops에서 const가 작동하는 이유는 무엇입니까?

for(const i = 0; i < 5; i++) console.log(i); 

반면에.

그러나 나는이 두 객체가이 같은 객체의 속성을 반복 할 때 작동한다는 것을 알아 챘습니다.

for(let property in thingy) console.log(property); 
for(const property in thingy) console.log(property); 

이유가 확실하지 않습니다.

답변

15

for (const property in object)은 각 반복마다 새 변수를 얻습니다.이 변수는 해당 반복에만 적용됩니다. 당신은 쉽게 루프 내부의 폐쇄를 사용하여 해당을 확인할 수 있습니다

for (const property in {a: 1, b: 2}) { 
 
    setTimeout(() => { 
 
    console.log(property); 
 
    }, 100); 
 
}

ab 기록하지만 varconst를 변경하는 경우,이 두 번 b를 기록합니다.

+0

오른쪽. 그러나'let'''''''''''''''''''''''''''''''''''''''''''var''가 아니라면, –

+0

@KonradViltersten이 경우에는 차이점이 없습니다. –

13

첫 번째 예에서는 ii++을 통해 수정되었습니다. const은 수정할 수 없으므로 오류가 발생합니다.

두 번째 예제에서는 for 루프의 property이 각 반복마다 다시 정의됩니다 (각 인스턴스는 범위를 벗어나 동일한 변수에 다시 할당하는 대신 새 인스턴스가 만들어집니다). 값을 수정하는 대신 실제로 다시 정의하기 때문에 const은 정상적으로 작동합니다.

+0

기본적으로 **이 특별한 ** 경우에는'const'와'let' 사이에는 차이가 없습니다, 맞습니까? –

+1

@ KonradViltersten -'let'은'for' 루프 내에서'property'를 수정할 수있는 반면'const'는 변경해서는 안된다는 점을 제외하고는. –

+1

아, 맞아! 그렇다면'const'를 사용하는 것이 실제로 바람직합니다. 나는 결코 ** 속성 이름의 가치를 바꾸고 싶거나 갈 필요가 없다. 시원한! –

관련 문제