var name = "메롱"console.log(name) //메롱var name = "안녕"console.log(name) //안녕
name = "하이"console.log(name) //하이
이러한 문제점을 보완하기 위해
ES6에서 등장한 변수의 선언방식이 let과 const 입니다.
1.2. let
let은 중복 선언은 불가하고 변수의 재할당은 가능합니다.
let name = "딸기"console.log(name) //딸기let name = "초코"console.log(name) //Uncaught SyntaxError: Identifier 'name' has already been declared
name = "바나나"console.log(name) //바나나
이는 개발자도구와 같은 REPL(Read-Eval-Print-Loop)모드와 일반 스크립트의 차이 때문이라고 합니다.
개발자도구에서 let을 테스트하기 위해서는 아래와 같이 한번에 입력해야합니다.
1.3. const
const는 중복 선언과 변수의 재할당 모두 불가능합니다.
const name = "딸기"console.log(name) //딸기const name = "초코"console.log(name) //Uncaught SyntaxError: Identifier 'name' has already been declared
name = "바나나"console.log(name) //Uncaught SyntaxError: Identifier 'name' has already been declared
for문의 선언문에서 var 키워드로 선언한 변수 i는 for문의 외부에서 참조가 가능합니다.
var i = 10;
for (var i = 0; i < 3; i++){
console.log(i) // 0 1 2
}
console.log(i); // 3
함수 내에 선언된 변수가 아닌 경우 전역 변수로 인식됩니다.
var value = "org"//전역변수if(true){
var value = "new"//전역변수
}
console.log(value) //new
2.2. 블록레벨 스코프 (block level scope)
let, const가 해당함.
모든 코드 블록 내에서 선언한 변수 -> 지역 변수
let cake = "초코"//전역변수if(true){
let cake = "딸기"//지역변수let cookie = "마시멜로"//지역변수
}
console.log(cake) //초코console.log(cookie) //Uncaught ReferenceError: cookie is not defined