let
기존의 es5 에서 scope 은 function 단위였다.
아래의 예제를 보자
if(true) { var test = 1; } console.log(test);JS Bin on jsbin.com
test 변수값이 block {} 안에 쓰여졌음에도 불구하고 console 에 정확히 찍힌다!
기존의 java, C#, 등등의 언어에 익숙한 사람이라면 ( block scope 을 사용하는 언어에 익숙한 사람이라면 )
지금 이 상황이 당황스러울 수 있다 +_+ 나도 첨엔 그랬으니;;;
ex. 가장 당황스러웠던 상황
아래를 보면 결과가 1,2,3, 이 찍힐거라 예상되지만
실제로는 그렇지 않다.
왜냐면 var i 는 function 안에 scope 이기 때문에 for 문이 3번 돌면 3이 되어 있고
setTimeout 이 실행 되는 시점에는 i 가 이미 3이 되어 있기 때문에 3만 3번이 찍히는 것이다.
for( var i = 0; i < 3; i++) { setTimeout(function() { console.log(i); }, 100); }JS Bin on jsbin.com
여튼 이로 인한 장점도 있지만 그만큼 사용하기 불편한 것도 많이 있었으니..
그래서 나온것이 block scoped variable 바로 let 이다.
위 코드를 우리가 원하던 방식으로 전개해 보자
for( let i = 0; i < 3; i++) { setTimeout(function() { console.log(i); }, 100); }
const
변환 할 수 없는 상수값을 지정할때 쓴다.
기존에 ES5 에서는 규칙상 대문자로 지정한 변수는 바꾸지 말자! 라는 암묵적인 규칙을 가지고 있었으나 실제로 그 변수를 수정하면 수정 됐었다.
var SAMPLE_CONST = 3; console.log(SAMPLE_CONST); SAMPLE_CONST = 2; // 바꾸지 말라고 이렇게 정한건데 꼭 바꾸는 사람들이 있음 ㅜㅠ console.log(SAMPLE_CONST);JS Bin on jsbin.com
그래서 등장한 것이 const !!
const SAMPLE_CONST = 3; console.log(SAMPLE_CONST); SAMPLE_CONST = 2; // 바꾸지 말라고 이렇게 정한건데 꼭 바꾸는 사람들이 있음 ㅜㅠ console.log(SAMPLE_CONST);JS Bin on jsbin.com
'ECMAScript 2015, ECMAScript 6th Edition' 카테고리의 다른 글
6. Array-like (0) | 2016.09.07 |
---|---|
5. rest (0) | 2016.09.07 |
4. spread (0) | 2016.09.06 |
3. iterable protocol (0) | 2016.09.04 |
2. arrow (0) | 2016.09.04 |