ES2015(ES6)에서 반짝이는 새로운 기능들이 많이 등장했다.

Var

var변수가 함수 외부에서 선언될 때의 범위는 전역이다. 즉, 함수 블록 외부에서 var를 사용하면 전역 변수가 되고, 함수 내에서 선언할 때는 함수 범위로 지정된다는 것이다.

  • 같은 범위 내에서라면 수정이 가능하다.

var의 호이스팅

호이스팅이란 변수와 함수 선언이 맨 위로 이동되는 자바스크립트 매커니즘이다. 아래와 같이 코드 A를 코드 B와 같이 해석한다.

// 코드 A
console.log (greeter);
var greeter = "say hello"
// 코드 B
var greeter;
console.log(greeter); // greeter is undefined
greeter = "say hello"

var의 문제점

var greeter = "hey hi";
var times = 4;

if (times > 3) {
    var greeter = "say Hello instead"; 
}

console.log(greeter) // "say Hello instead"

의도적으로 greeter를 재정의한 것이라면 괜찮지만, 변수 greeter가 이미 정의되어 있다는 사실을 인식하지 못한 경우에는 문제가 될 수 있다.

Let

let으로 선언된 변수는 해당 블록({}로 바인딩된 코드 청크) 내에서만 사용 가능하다.

let은 업데이트될 수 있지만 재선언은 불가능

코드 A, C와 달리 코드 B는 에러가 발생한다. 코드 C는 다른 범위 내에서 선언하기 때문에 문제가 되지 않는다.

// 코드 A
let greeting = "say Hi";
    greeting = "say Hello instead";
// 코드 B
let greeting = "say Hi";
let greeting = "say Hello instead"; 
// error: Identifier 'greeting' has already been declared
// 코드 C
let greeting = "say Hi";
if (true) {
    let greeting = "say Hello instead";
    console.log(greeting); // "say Hello instead"
}
console.log(greeting); // "say Hi"

let의 호이스팅

var과 마찬가지로 let선언은 맨 위로 끌어올려진다. 하지만, undefined로 초기화되는 var와 다르게 let의 키워드는 초기화되지 않는다. 선언 이전에 let 변수를 사용하려고 시도한다면 Reference Error가 발생할 것이다.

Const

Const로 선언된 변수는 일정한 상수 값을 유지한다. const 선언은 let 선언과 몇 가지 유사점을 공유한다.

블록 범위 const

let선언처럼 const선언도 선언된 블록 범위 내에서만 접근 가능하다.

const는 업데이트도, 재선언도 불가능하다

const로 선언된 변수의 값이 해당 범위 내에서 동일하게 유지됨을 의미한다. 즉, 업데이트하거나 다시 선언할 수가 없다는 것이다. 따라서 모든 const선언은 선언하는 당시에 초기화되어야 한다.

const객체는 업데이트할 수 없지만, 개체의 속성은 업데이트할 수 있다.

const greeting = {
    message: "say Hi",
    times: 4
    }

이 작업은 불가능하다.

greeting = {
    words: "Hello",
    number: "five"
} // error:  Assignment to constant variable.

이 작업은 가능하다.

greeting.message = "say Hello instead";
profile
٩( ᐛ )و 

0개의 댓글

Powered by GraphCDN, the GraphQL CDN