// -------------------------- (1)
var a = 1;
function outer() {
function inner() {
console.log(a); // undefined
var a = 3;
}
inner(); // ------------ (2)
console.log(a); // 1
}
outer(); // ---------------- (3)
console.log(a); // 1
function a(x) {
// 수집 대상 1(매개변수)
console.log(x); // (1)
var x; // 수집 대상 2(변수 선언)
console.log(x); // (2)
var x = 2; // 수집 대상 3(변수 선언)
console.log(x); // (3)
}
a(1);
function a() {
var x = 1; // 수집 대상 1(매개변수 선언)
console.log(x); // (1)
var x; // 수집 대상 2(변수 선언)
console.log(x); // (2)
var x = 2; // 수집 대상 3(변수 선언)
console.log(x); // (3)
}
a();
function a() {
var x; // 수집 대상 1의 변수 선언 부분
var x; // 수집 대상 2의 변수 선언 부분
var x; // 수집 대상 3의 변수 선언 부분
x = 1; // 수집 대상 1의 할당 부분
console.log(x); // (1)
console.log(x); // (2)
x = 2; // 수집 대상 3의 할당 부분
console.log(x); // (3)
}
a(1);
function a() {
console.log(b); // (1)
var b = 'bbb'; // 수집 대상 1(변수 선언)
console.log(b); // (2)
function b() {} // 수집 대상 2(함수 선언)
console.log(b); // (3)
}
a();
function a() {
var b; // 수집 대상 1. 변수는 선언부만 끌어올립니다.
function b() {} // 수집 대상 2. 함수 선언은 전체를 끌어올립니다.
console.log(b); // (1)
b = 'bbb'; // 변수의 할당부는 원래 자리에 남겨둡니다.
console.log(b); // (2)
console.log(b); // (3)
}
a();
function a() {
var b;
var b = function b() {}; // ← 바뀐 부분
console.log(b); // (1)
b = 'bbb';
console.log(b); // (2)
console.log(b); // (3)
}
a();
function a() {
/* ... */
} // 함수 선언문. 함수명 a가 곧 변수명.
a(); // 실행 OK.
var b = function() {
/* ... */
}; // (익명) 함수 표현식. 변수명 b가 곧 함수명.
b(); // 실행 OK.
var c = function d() {
/* ... */
}; // 기명 함수 표현식. 변수명은 c, 함수명은 d.
c(); // 실행 OK.
d(); // 에러!
console.log(sum(1, 2));
console.log(multiply(3, 4));
function sum(a, b) {
// 함수 선언문 sum
return a + b;
}
var multiply = function(a, b) {
// 함수 표현식 multiply
return a * b;
};
var sum = function sum(a, b) {
// 함수 선언문은 전체를 호이스팅합니다.
return a + b;
};
var multiply; // 변수는 선언부만 끌어올립니다.
console.log(sum(1, 2));
console.log(multiply(3, 4));
multiply = function(a, b) {
// 변수의 할당부는 원래 자리에 남겨둡니다.
return a * b;
};
console.log(sum(3, 4));
function sum(x, y) {
return x + y;
}
var a = sum(1, 2);
function sum(x, y) {
return x + ' + ' + y + ' = ' + (x + y);
}
var c = sum(1, 2);
console.log(c);
console.log(sum(3, 4)); // Uncaught Type Error: sum is not a function
var sum = function(x, y) {
return x + y;
};
var a = sum(1, 2);
var sum = function(x, y) {
return x + ' + ' + y + ' = ' + (x + y);
};
var c = sum(1, 2);
console.log(c);
var a = 1;
var outer = function() {
var inner = function() {
console.log(a);
var a = 3;
};
inner();
console.log(a);
};
outer();
console.log(a);
var a = 1;
var outer = function() {
var b = 2;
var inner = function() {
console.dir(inner);
};
inner();
};
outer();
var a = 1;
var outer = function() {
var b = 2;
var inner = function() {
console.log(b);
console.dir(inner);
};
inner();
};
outer();
var a = 1;
var outer = function() {
var b = 2;
var inner = function() {
console.log(b);
debugger;
};
inner();
};
outer();