hoist: λμ΄μ¬λ¦¬λ€.
μλ°μ€ν¬λ¦½νΈμμ λμ΄μ¬λ €μ§λ κ²μ λ³μμ΄λ€. var keyword λ‘ μ μΈλ λͺ¨λ λ³μ μ μΈμ νΈμ΄μ€νΈ λλ€.
λ³μκ° ν¨μ λ΄μμ μ μλμμ κ²½μ°, μ μΈμ΄ ν¨μμ μ΅μμλ‘, ν¨μ λ°κΉ₯μμ μ μλμμ κ²½μ°, μ μ 컨ν μ€νΈμ μ΅μμλ‘ λ³κ²½μ΄ λλ€.
var x;
console.log(x)
x = 100
console.log(x)λ€λ₯Έ μΈμ΄μ κ²½μ° λ³μ xλ₯Ό μ μΈνμ§ μκ³ μΆλ ₯νλ € νλ€λ©΄ μλ¬λ₯Ό λ°μν κ² μ΄λ€.
νμ§λ§ μλ°μ€ν¬λ¦½νΈμ κ²½μ° undefinedλΌκ³ νκ³ λμ΄κ°λ€.
var x = 100 ꡬ문μμ var xλ₯Ό νΈμ΄μ€νΈ νκΈ° λλ¬Έμ΄λ€.
μ μΈλ¬Έμ νμ μλ°μ€ν¬λ¦½νΈ μμ§ κ΅¬λμ κ°μ₯ μ΅μ°μ μΌλ‘ ν΄μνλ―λ‘ νΈμ΄μ€ν
λκ³ , ν λΉ κ΅¬λ¬Έμ λ°νμ κ³Όμ μμ μ΄λ£¨μ΄μ§κΈ° λλ¬Έμ νΈμ΄μ€ν
λμ§ μλλ€.
- ν¨μ μ μΈλ¬Έ: function μ μλΆλ§ μ‘΄μ¬νκ³ λ³λμ ν λΉ λͺ λ Ήμ΄ μλ κ²μ μλ―Ένλ€. ν¨μλͺ μ΄ μ μλμ΄μΌ νλ€.
- ν¨μ ννμ: μ μν functionμ λ³λμ λ³μμ ν λΉνλ κ²μ μλ―Ένλ€. ν¨μλͺ μ΄ μμ΄λ λλ€.
function a() { } //ν¨μ μμΈλ¬Έ ν¨μλͺ
aκ° κ³§ λ³μλͺ
a()
var b = function() { }//μ΅λͺ
ν¨γ
ννμ λ³μλͺ
bκ° κ³§ ν¨μλͺ
b()
var b = function d() { } //κΈ°λͺ
ν¨μ ννμ λ³μλͺ
μ c ν¨μλͺ
μ d
c()//μ€ν ok
d() // μλ¬!ν¨μ μ μΈλ¬Έμ μ 체λ₯Ό νΈμ΄μ€ν
ν λ°λ©΄ ν¨μ ννμμ λ³μ μ μΈλΆλ§ νΈμ΄μ€ν
νλ€.
foo( );
function foo( ){
console.log(βhelloβ);
};
// console> hellofoo ν¨μμ λν μ μΈμ νΈμ΄μ€ν νμ¬ global κ°μ²΄μ λ±λ‘μν€κΈ° λλ¬Έμ helloκ° μ λλ‘ μΆλ ₯λλ€.
foo( );
var foo = function( ) {
console.log(βhelloβ);
};
// console> Uncaught TypeError: foo is not a functionμ΄ λλ²μ§Έ μμ μ ν¨μ ννμ ν¨μ 리ν°λ΄μ ν λΉνλ ꡬ쑰μ΄κΈ° λλ¬Έμ νΈμ΄μ€ν λμ§ μμΌλ©° κ·Έλ κΈ° λλ¬Έμ λ°νμ νκ²½μμ Type Errorλ₯Ό λ°μμν¨λ€.
νΈμ΄μ€ν μμ
function a() {
console.log(b) // (1)
var b = 'bbb' // μμ§ λμ 1(λ³μ μ μΈ)
console.log(b) // (2)
function b() {} // μμ§ λμ 2(ν¨μ μ μΈ)
console.log(b)
}νΈμ΄μ€ν λ κ²°κ³Όλ‘ λ³΄λ©΄
function a() {
var b
function b() {} //ν¨μ μ μΈμ μ 체λ₯Ό λμ΄μ¬λ¦°λ€
console.log(b) //(1) bν¨μ
b = 'bbb'
console.log(b) //(2) 'bbb'
console.log(b) //(3) 'bbb'
}
a()
- νΈμ΄μ€ν (Hoisting)"μ λν΄μ μ€λͺ νμΈμ.
νΈμ΄μ€ν μ μΈν°ν리ν°κ° μλ°μ€ν¬λ¦½νΈ μ½λλ₯Ό ν΄μν¨μ μμ΄μ, Global μμ λλ ν¨μ μμ μμ λν΄μ μ£Όμ΄μ§ μ μΈλ€μ λͺ¨λ λμ΄μ¬λ €μ ν΄λΉ μ ν¨ λ²μ μ΅μλ¨μ μ μΈνλ κ²μ μλ―Ένλ€.