제가 이해한 부분이 혹시 맞는지 알 수 있을까요?
var로 생성 했을때 block스코프 생성 되지 않음
var funcs = [];
for (var i = 0; i < 10; i++) {
funcs.push(function () {
console.log(i);
});
}
funcs.forEach(function (f) {
f();
});
let으로 생성 했을 때 block스코프인해 변수의 유효범위가 생김.
즉, for문의 { } 블록 스코프로 변수의 유효범위로 인해서
funcs.push(function(){
console.log(i)
})
에서 i가 for문의 i를 가져올 수 있게 됨.
let funcs = [];
for (let i = 0; i < 10; i++) {
funcs.push(function () {
console.log(i);
});
}
funcs.forEach(function (f) {
f();
});
마찬가지로 var를 사용시 똑같은 코드지만 var는 블록스코프로 인해 유효범위가 없기 때문에 for문의 i의 변수의 유효범위로 console.log(i)에 영향을 가지지 못함.
Answer 2
0
안녕하세요, 인프런 AI 인턴이에요.
제가 이해한 내용을 설명해 드리겠습니다.
첫번째 경우에는 var로 변수 i를 선언했기 때문에, for문이 실행될 때마다 i가 업데이트되면서 배열 funcs에 담긴 익명 함수들은 모두 같은 i를 참조하게 됩니다. 따라서 funcs를 호출할 때는 for문이 종료된 후의 i값을 출력하게 되어 10이 10번 출력되게 됩니다.
두번째 경우에는 let으로 변수 i를 선언했기 때문에, for문이 실행될 때마다 새로운 i가 생성되면서 배열 funcs에 담긴 익명 함수들은 각자 다른 i를 참조하게 됩니다. 따라서 funcs를 호출할 때는 for문에서의 각각의 i값을 출력하게 되므로 0부터 9까지 순서대로 출력됩니다.
var는 함수 스코프를 가지고 있는 반면, let은 블록 스코프를 가지고 있기 때문에 변수의 유효 범위에 차이가 있습니다.
더 궁금한 점이 있으시면 언제든지 물어보세요. 즐거운 프로그래밍 하세요!
프로토타입 체이닝에 대해서
0
377
1
react 사용할 때 destructuring assignment라고 하는거 진짜 많이 사용 했는데 신기합니다.
0
520
1
2023-10-30일 기준 Object Rest/Spread Properties 적용 됬나봐요. 짱신기
0
337
1
블록스코프 내에서 펑션을 선언해서 사용하는경우가 있나요?(실무)
0
347
1
클래스에서 화살표함수?
0
1220
2
default parameter TDZ
0
279
1
강의 자료
1
305
2
전개 연산자 얕은 복사 질문
0
277
1
궁금한게 있는데요 ..
0
307
2
궁금한게 잇는데요 여기서 this는 array값을 출력해주나요?
0
359
1
template literal 강의에서의 reduce 메소드
0
312
2
다운로드 받은파일
0
285
1
const 이럴때도 사용하나요?
0
386
1
순서정렬
0
235
1
함수선언문 말고 arrow function
0
261
1
this바인딩 질문
1
266
1
에로우함수 new.target
0
208
2
함수표현식질문
0
224
1
rest parameter장점
0
312
1
if(exps[i])
0
192
1
좋은강의 감사합니다 이거는 호이스팅이 실행안되는거 같은데
0
305
3
해체하여 적용하려는 대상은 해체하는 대상의 타입에 매칭해야하나요?
0
173
1
강의노트 없습니다.
0
232
1
강의노트를 열면 텍스트가 다 깨집니다.
0
160
2

