Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 블로그만들기 #웹사이트만들기 #
- TIL #Today I Learned # 기록 # 회고 #Udemy
- 불리언 #Boolean #number #string #symbol #null #undefined
- #TIL #Today I Learned #기록 #회고 #ternary statement #swich statement #스위치 반복문 #
- 자바스크립트 #javascript #datatype #데이터타입 #자료형
- single source of truth란 #single source of truth #자료의중복 #자료의비정합성 #비정합성 #리팩토링
- 고스트 블로그 #
- Hackerrank #해커랭크 #python #파이썬 #알고리즘 #Algorithm
- 웹페이지제작 #
- 블로그 셀프제작
- javascript '===' #javascript #TIL #Today I Learned #기록 #회고
- javascript #event #onclick #js
- TIL #Today I Learned #
- 강의 #느낀점 #snowfox #스노우폭스 #김승호회장
- javascript #statement #expression #difference
- hackerrank #python #algorithm #해커랭크 #파이썬 #알고리즘
- 기록 #회고
Archives
- Today
- Total
well-balanced
[TIL] 기록 51일차 본문
Today I Learned
Hackerrank에 있는 JavaScript 문제를 몇가지 풀어봤다. 이곳에 정리했다.
클로저에 대해서 이해하려고 노력중이다. 일단 그 중에 꽤나 자주 쓰이는(?) Classic한 예제를 이해하는데 성공했다.
var arr = [] for(var i=0; i<5; i++){ arr[i] = () => { return i } } for(var index in arr) { console.log(arr[index]()) }
이 코드의 결과는 0, 1, 2, 3, 4
가 출력될 거라는 내 예상과는 다르게 아래와 같았다.
그 이유는 i가 return된 scope에는 변수 i에 대한 선언이 없기 때문에 그 상위 scope의 전역변수 i 값인 5를 참조했기 때문이다. i 변수를 var가 아닌 let으로 선언한다면 어떻게 될까?
var arr = []
for(let i=0; i<5; i++){
arr[i] = () => {
return i
}
}
for(var index in arr) {
console.log(arr[index]())
}
그 이유는 let으로 변수를 선언하면 새로운 scope를 형성하고, 전역변수의 i가 아닌 let scope 안에서의 i 값을 참조하기 때문이다.
// var 선언
for(var i=0; i<5; i++){
arr[i] = ()=>{
return i
}
}
console.log(i) // 5
// let 선언
for(var i=0; i<5; i++){
arr[i] = ()=>{
return i
}
}
console.log(i) // i is not defined
'TIL : study log' 카테고리의 다른 글
[TIL] 기록 53일차 (0) | 2019.12.23 |
---|---|
[TIL] 기록 52일차 (0) | 2019.12.22 |
[TIL] 기록 50일차 (0) | 2019.12.20 |
[TIL] 기록 49일차 (0) | 2019.12.19 |
[TIL] 기록 48일차 (0) | 2019.12.18 |
Comments