Hoisting

μžμ‹ μ΄ μ†ν•œ scopeμ—μ„œ μ΅œμƒλ‹¨κΉŒμ§€ λŒμ–΄μ˜¬λ¦°λ‹€.

console.log(a);//error

μ •μ˜λ˜μ§€ μ•Šμ€ aλ₯Ό 찾을 땐 error κ°€ λœ¬λ‹€.

console.log(a); //undefined
var a = 1;
console.log(a); //1

첫번째 console.log(a) μ—μ„œ errorκ°€ μ•ˆλ‚˜κ³  undefinedκ°€ λ‚˜μ˜¨λ‹€. 이게 λ°”λ‘œ Hoisting 'ㅁ'/ Hoisting을 톡해 μžλ°”μŠ€ν¬λ¦½νŠΈκ°€ μœ„μ—μ„œ μ•„λž˜κΉŒμ§€ μ­‰ 읽어 λ‚΄λ €κ°€κΈ°λ§Œ ν•œλ‹€λŠ”κ²Œ μ•„λ‹ˆλΌλŠ”κ±Έ μ•Œ 수 μžˆλ‹€.

var a 
console.log(a);
a = 1;
console.log(a);

μ΄λ ‡κ²Œ 된거라고 μƒκ°ν•˜λ©΄ 쉽닀. λŒμ–΄μ˜¬λ €μ„œ 미리 λ³€μˆ˜λ₯Ό μ •μ˜ν–ˆμ§€λ§Œ 값은 μ œμžλ¦¬μ—μ„œ 넣어짐

전체가 λŒμ–΄μ˜¬λ €μ§€λŠ”κ²Œ μ•„λ‹ˆλΌ λ³€μˆ˜μ— λŒ€ν•œ μ„ μ–ΈλΆ€λΆ„λ§Œ λŒμ–΄μ˜¬λ €μ§„λ‹€.

console.log(a);
var a = 1;
console.log(a);
foo();
function foo(){
    console.log(a);
}

foo() ν•¨μˆ˜λŠ” λ¬Έμ œμ—†μ΄ μ‹€ν–‰λœλ‹€.

bar();

var b = 1;

function bar(){
    if (false) {
        b = 2;
    } else {
        console.log(b);
    }
}
console.log(b);

bar()λ₯Ό μ‹€ν–‰ν•˜λ©΄ console.log(b)κ°€ μ°νžˆλŠ”λ° bλŠ” 아직 μ •μ˜ 되기 μ „ ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜μ˜€λ‹€. ν•˜μ§€λ§Œ ν˜Έμ΄μŠ€νŒ…μœΌλ‘œ var b κ°€ λ¨Όμ € 선언이 λ˜μ–΄ 있기 λ•Œλ¬Έμ— undefinedκ°€ λœ¬λ‹€.

var b;

bar(); // undefined

b = 1;

function bar(){
    if (false) {
        b = 2;
    } else {
        console.log(b);
    }
}
console.log(b); //1

μ΄λŸ°μ‹μœΌλ‘œ μƒκ°ν•˜λ©΄ 쉽닀.

Function Expressin ν•¨μˆ˜ ν‘œν˜„μ‹

d();

var d = function () {
  console.log('I am inside function d');  
};

λ³€μˆ˜λ‘œ μ •μ˜ν•˜κ³  ν•¨μˆ˜λ₯Ό ν• λ‹Ήν•΄ μ€€λ‹€. d()λŠ” undefinedκ°€ λ‚˜μ˜¨λ‹€. μ™œλƒν•˜λ©΄ var d κΉŒμ§€λ§Œ hoisting 되기 λ•Œλ¬Έμ΄λ‹€.

var d;

d();

d = function () {
  console.log('I am inside function d');  
};

이와 λΉ„μŠ·ν•˜λ‹€κ³  μƒκ°ν•˜λ©΄ μ’‹λ‹€.

Function Declaration ν•¨μˆ˜ 선언식

j();

function j (){
    console.log('j');
}

μ„ μ–Έμ‹μœΌλ‘œ 적은건 ν•¨μˆ˜ μžμ²΄κ°€ hoisting λœλ‹€. νšŒμ‚¬ μ»¨λ²€μ…˜μ— λ§žμΆ”μ–΄ μž‘μ—…ν•˜λ©΄ λœλ‹€.

ν•¨μˆ˜ 선언식은 μ„Έλ―Έμ½œλ‘ (;)을 찍지 μ•ŠλŠ”λ‹€.

var e = 2;
var d = function () {};

function j () {
    console.log('j');
} //이 뢀뢄에 μ„Έλ―Έμ½œλ‘ μ„ 찍지 μ•ŠλŠ”λ‹€.

hoisting λ˜λŠ”κ±΄ 본인이 μ†ν•œ scope κΉŒμ§€ λŒμ–΄μ˜¬λ €μ§„λ‹€.

var me = 'sla';

function foo () {
    alert(me);

    var me = 'someone else';
}

foo();
var me = 'sla';

function foo () {
    var me;
    alert(me);

    me = 'someone else';
}

foo();

κ·Έλž˜μ„œ undefinedκ°€ λœ¬λ‹€.

Quiz

function foo() {
    return
    {
      age: 30  
    };
}

console.log(typeof foo());

undefinedκ°€ λœ¬λ‹€. return ꡬ문은 κ°œν–‰ν•΄μ„œλŠ” μ•ˆλ˜μ„œ..

var arr = ['hello', 'world'];
arr[a] = 'thank you';
console.log('2' in arr);

인덱슀 in arr 인데 μΈλ±μŠ€λ„ κ²°κ΅­ 문자라 싀행이 λœλ‹€.

Last updated

Was this helpful?