//변수선언
var myVariable;
myVariable = 'codeit';
var myVariable2 = 'codeit';
//중복선언허용
var myVariable = 'codeit';
console.log(myVariable); //codeit
var myVariable3 = 'Codeit!';
console.log(myVariable3); //Codeit!
//함수 스코프
{
let x1 = 3;
}
function myFunction() {
let y1 = 4;
}
console.log(x1); //Uncaught ReferenceError: x is not defined
console.log(y1); //Uncaught ReferenceError: x is not defined
{
var x2 = 3;
}
function myFunction() {
var y2 = 4;
}
console.log(x2); //3
console.log(y2); //Uncaught ReferenceError: x is not defined
//끌어올림 (Hoisting)
console.log(myVariable4); //Uncaught ReferenceError: x is not defined
let myVariable4;
console.log(myVariable5); //undefined
var myVariable5;
console.log(myVariable); //undefined
var myVariable = 2;
console.log(myVariable); //2
sayHi(); //hi
function sayHi() {
console.log('hi');
}
선언을 아예 재선언이 가능함.( 혼란 야기 )
중복 선언 가능 ( 혼란 야기 )
함수의 {} 안에 있을 때를 제외하고, 나머지 {} 안에서 선언될 때는 전역으로 적용된다.
let은 블록스코프라서 {} 안에 있으면 꼼짝못하지~~~
var은 호이스팅이 가능하다. 그래서 먼저 콘솔 출력을 작성하고, 이 후에 선언해도 undefined 가 나온다.
let은 이런 경우에 에러가 발생
그리고 선언과 동시에 var 에 값을 넣어줄 때, 호이스팅이 선언을 전역변수로 사용하는 것이지 값까지 전역으로 사용 가능 한 것은 아니다.
그냥 let 써라.