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?