Hoisting์ด๋, ์ ์ธ๋ค์ ๋ชจ๋ ๋์ด์ฌ๋ ค์ ์ค์ฝํ์ ์ต์๋จ์ ์ ์ธํ๋ ๊ฒ์ด๋ค.
Hoisting is JavaScript's default behavior of moving declarations to the top of the current scope (to the top of the current script or the current function)
let๊ณผ const๋ฅผ ์ฌ์ฉํ๋ฉด, ๋ณ์๋ฅผ ์ ์ธํ๊ธฐ ์ ์ ์ฌ์ฉํ๋ ค ํ ๋ ์๋ฌ๊ฐ ์ผ์ด๋๋ค.
carName = "Volvo";
let carName; //ReferenceError
carName = "Volvo";
const carName; //ReferenceError
x; //ReferenceError
let x = 3;
๋ฐ๋ฉด, var๋ก ๋ณ์๋ฅผ ์ ์ธํ๋ฉด ์ ์ธํ๊ธฐ ์ ์๋ ์ฌ์ฉํ ์ ์๋ค.
carName = "Volvo";
var carName; //Volvo
x; //undefined
var x = 3;
x; //3
์ ์ด๋ด๊น? var๋ก ์ ์ธํ ๋ณ์๋ ๋์ด์ฌ๋ฆฐ๋ค๋ ๋ป์ hoisting ๋ฉ์ปค๋์ฆ์ ๋ฐ๋ฅด๊ธฐ ๋๋ฌธ์ด๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๋ ํจ์๋ ์ ์ญ ์ค์ฝํ ์ ์ฒด๋ฅผ ์ดํด๋ณด๊ณ , var๋ก ์ ์ธํ ๋ณ์๋ฅผ ๋งจ ์๋ก ๋์ด์ฌ๋ฆฐ๋ค. ํ์ง๋ง ์ ์ธ๋ง ๋์ด์ฌ๋ ค์ง๊ณ , ํ ๋น์ ๋์ด์ฌ๋ ค์ง์ง ์๋๋ค.
var์ ์ด๋ฌํ ํน์ฑ ๋๋ฌธ์ ํผ๋์ค๋ฌ์ด ์ฝ๋๊ฐ ์๊ธธ ์ ์๋ค. ๊ทธ๋์ ES6์์ let์ด ๋ฑ์ฅํ๋ค. ์์ง์ ES5๊ฐ ์์ ํ ES6๋ก ๋์ฒด๋ ๊ฑด ์๋๊ธฐ ๋๋ฌธ์ var์ ์๊ธฐ๋ ํด์ผ ํ์ง๋ง ๋์ค์๋ ์์ ํ ์์ด์ง ์๋ ์๋ค.
expression(); //Output: "TypeError: expression is not a function
var expression = function(){
console.log('Will this work?');
}
hoisted(); //This function has been hoisted.
function hoisted() {
console.log('This function has been hoisted.');
};
ํจ์ ์ ์ธ์ ๋ณ์ ์ ์ธ๋ณด๋ค ์์์ ์์ง๋ง, ๋ณ์ ํ ๋น๋ณด๋ค๋ ํ์์ ์๋ค.
Function declarations are hoisted over variable declarations but not over variable assignments.
var double = 22;
function double(num) {
return (num*2);
}
console.log(typeof double); // Output: number
var double;
function double(num) {
return (num*2);
}
console.log(typeof double); // Output: function
[JavaScript] ํธ์ด์คํ (Hoisting)์ด๋ - Heee's Development Blog