ํ˜ธ์ด์ŠคํŒ…(hoisting)

๐Ÿ“„ ํ˜ธ์ด์ŠคํŒ…(hoisting)

  • ์ •์˜: ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์ด ์‹๋ณ„์ž๋“ค์„ ์ตœ์ƒ์œผ๋กœ ๋Œ์–ด์˜ฌ๋ฆฌ๋Š” ๊ฒƒ

image

โญ ๊ทœ์น™

  1. ๋ณ€์ˆ˜๋Š” ์„ ์–ธ๋ถ€๋งŒ ๋Œ์–ด์˜ฌ๋ฆฐ๋‹ค.
  2. ํ•จ์ˆ˜ ์„ ์–ธ์€ ์ „์ฒด๋ฅผ ๋Œ์–ด์˜ฌ๋ฆฐ๋‹ค.
  3. ํ•จ์ˆ˜ ํ‘œํ˜„์‹์€ ํ• ๋‹น๋œ ๋ณ€์ˆ˜ ์„ ์–ธ๋ถ€๋งŒ ๋Œ์–ด์˜ฌ๋ฆฐ๋‹ค.
  4. let์„ ์ด์šฉํ•œ ํ˜ธ์ด์ŠคํŒ…์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.
hello2(); // ํ•จ์ˆ˜ ํ˜ธ์ถœ

function hello2() {
  //ํ•จ์ˆ˜ ์„ ์–ธ
  console.log("hello2");
}

ํ•จ์ˆ˜๋ฟ๋งŒ ์•„๋‹ˆ๋ผ varํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•œ ํ˜ธ์ด์ŠคํŒ…๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

age = 6;
age++;
console.log(age);

var age;

์ฃผ์˜ํ•  ์ 

var๋กœ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•จ๊ณผ ๋™์‹œ์— ๊ฐ’์„ ์ง€์ •ํ–ˆ๋‹ค๋ฉด, ๊ฐ’์„ ์ œ์™ธํ•œ ์„ ์–ธ๋งŒ ํ˜ธ์ด์ŠคํŒ… ๋ฉ๋‹ˆ๋‹ค.

console.log(name);

name = "Mark";

console.log(name);

var name = "Sujin";

๊ฒฐ๊ณผ

hoisting

์ด๋ ‡๊ฒŒ ํ˜ธ์ด์ŠคํŒ…๋˜์–ด ๋จผ์ € ์ถœ๋ ฅ๋œ name์€ ๊ฐ’์„ ์ œ์™ธํ•œ ์„ ์–ธ๋งŒ ๋Œ์–ด์˜ฌ๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— undifined๋ผ๊ณ  ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.

ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ–ˆ์„ ๋•Œ๋Š” ํ•จ์ˆ˜ ์ „์ฒด๋ฅผ ๋Œ์–ด์˜ฌ๋ฆฝ๋‹ˆ๋‹ค.

function a() {
  var b; // ์ˆ˜์ง‘ ๋Œ€์ƒ 1. ๋ณ€์ˆ˜๋Š” ์„ ์–ธ๋ถ€๋งŒ ๋Œ์–ด์˜ฌ๋ฆฝ๋‹ˆ๋‹ค.
  function b() {} // ์ˆ˜์ง‘ ๋Œ€์ƒ 2. ํ•จ์ˆ˜ ์„ ์–ธ์€ ์ „์ฒด๋ฅผ ๋Œ์–ด์˜ฌ๋ฆฝ๋‹ˆ๋‹ค.

  console.log(b);
  b = "bbb";
  console.log(b);
  console.log(b);
}
a();

๊ฒฐ๊ณผ

[Function: b]
bbb
bbb

๋งŒ์•ฝ ํ•จ์ˆ˜ ํ‘œํ˜„์‹์„ ์ด์šฉํ•ด์„œ ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ–ˆ๋‹ค๋ฉด, ์ „์ฒด๊ฐ€ ์•„๋‹Œ ๋ณ€์ˆ˜ ์„ ์–ธ๋ถ€๋งŒ ๋Œ์–ด์˜ฌ๋ฆฝ๋‹ˆ๋‹ค.

๐Ÿ“„ let์„ ์ด์šฉํ•œ ํ˜ธ์ด์ŠคํŒ…์€ ๋ถˆ๊ฐ€๋Šฅ!

let์„ ์ด์šฉํ•œ ํ˜ธ์ด์ŠคํŒ…์€ ๋ถˆ๊ฐ€๋Šฅ ํ•ฉ๋‹ˆ๋‹ค.

let์€ ๋ฌด์กฐ๊ฑด ์„ ์–ธ์ด ์šฐ์„ ์‹œ ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

console.log(name);

name = "MARK";

console.log(name);

let name;

๊ฒฐ๊ณผ

hoisting2

์ถœ์ฒ˜

  • ํŒจ์ŠคํŠธ์บ ํผ์Šค ํ”„๋ก ํŠธ์—”๋“œ ๊ฐ•์˜
  • ์ฝ”์–ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ

Leave a comment