Skip to content

Latest commit

ย 

History

History
91 lines (64 loc) ยท 3.93 KB

File metadata and controls

91 lines (64 loc) ยท 3.93 KB

ํ˜ธ์ด์ŠคํŒ…์ด๋ž€?

์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋Š” ์ƒ์„ฑ๊ณผ ์‹คํ–‰ ๋‹จ๊ณ„๋กœ ๋‚˜๋‰œ๋‹ค. ํ˜ธ์ด์ŠคํŒ…์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์ด ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋‹จ๊ณ„์—์„œ, ์‹คํ–‰ ์ปจํ…์ŠคํŠธ์˜ scope๋ฅผ ์ •์˜ํ•  ๋•Œ, ๋ณ€์ˆ˜๋‚˜ ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ์„ ์Šค์ฝ”ํ”„์˜ ์ตœ์ƒ๋‹จ์œผ๋กœ ๋Œ์–ด์˜ฌ๋ฆฌ๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.

๋‹ค์Œ ๊ตฌ๋ฌธ์ด ์žˆ์„ ๋•Œ,

var variable = "variable";

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์€ ์ปดํŒŒ์ผ ๊ณผ์ •์—์„œ ์ด๋ฅผ ์„ ์–ธ๋ฌธ๊ณผ ํ• ๋‹น๋ฌธ์œผ๋กœ ๋‚˜๋ˆ„์–ด์„œ ํ•ด์„ํ•œ๋‹ค.

var variable; // ์„ ์–ธ๋ฌธ
variable = "variable"; // ํ• ๋‹น๋ฌธ

ํ˜ธ์ด์ŠคํŒ…์€ ์ด ์„ ์–ธ๋ฌธ์„ ์Šค์ฝ”ํ”„์˜ ์ตœ์ƒ๋‹จ์œผ๋กœ ๋Œ์–ด์˜ฌ๋ฆฌ๋Š” ๊ฒƒ์ด๋‹ค.

๋ณ€์ˆ˜ ํ˜ธ์ด์ŠคํŒ…

console.log(a); // undefined
var a = 'hi';
console.log(a); // hi

๋ณ€์ˆ˜๋Š” '์ปดํŒŒ์ผ'๊ณผ์ •์—์„œ ์Šค์ฝ”ํ”„์˜ ์ตœ์ƒ๋‹จ์œผ๋กœ ๋Œ์–ด์˜ฌ๋ ค์ ธ์„œ, ๋ณ€์ˆ˜ ๊ฐ์ฒด์— ์ถ”๊ฐ€๋œ๋‹ค. ์ด ๋•Œ ํ”„๋กœํผํ‹ฐ๋Š” ๋ณ€์ˆ˜ ์ด๋ฆ„, ๊ฐ’์€ undefined๋กœ ์ดˆ๊ธฐํ™”๋œ๋‹ค. ๋”ฐ๋ผ์„œ ๋ณ€์ˆ˜ ์„ ์–ธ๋ฌธ ์ด์ „์—, ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜๊ณ  ํ• ๋‹น๋ฌธ์—์„œ ๋น„๋กœ์†Œ a๋Š” 'hi'๋กœ ํ• ๋‹น๋œ๋‹ค.

let, const keyword

let๊ณผ const์˜ ๊ฒฝ์šฐ์—๋„ ํ˜ธ์ด์ŠคํŒ…์ด ์ผ์–ด๋‚˜์ง€๋งŒ, ์„ ์–ธ๋ฌธ ์ด์ „์— ์ฐธ์กฐํ•˜๋ ค๊ณ  ํ•˜๋ฉด Reference Error๊ฐ€ ๋ฐœ์ƒ๋œ๋‹ค. ๋ณ€์ˆ˜ ์„ ์–ธ๋ฌธ์ด ์Šค์ฝ”ํ”„ ์ตœ์ƒ๋‹จ์œผ๋กœ ๋Œ์–ด์˜ฌ๋ ค์ง€๊ธฐ๋Š” ํ•œ๋‹ค. ํ•˜์ง€๋งŒ, ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜๋ฉฐ ์„ ์–ธ๋ฌธ์— ๋„๋‹ฌํ•ด์•ผ ๋ณ€์ˆ˜๋ฅผ ์œ„ํ•œ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ™•๋ณด๋˜๊ณ  undefined๋กœ ์ดˆ๊ธฐํ™”๊ฐ€ ๋œ๋‹ค. ์Šค์ฝ”ํ”„ ์ตœ์ƒ๋‹จ๋ถ€ํ„ฐ ์„ ์–ธ๋ฌธ ์ „๊นŒ์ง€๋ฅผ ์ผ์‹œ์  ์‚ฌ๊ฐ ์ง€๋Œ€(Temporal Dead Zone; TDZ) ๋ผ๊ณ  ํ•œ๋‹ค.

{
  console.log(apple); //ReferenceError: Cannot access 'apple' before initialization
  let apple; 
  apple = "apple";
}

ReferenceError: Cannot access 'apple' before initialization ์ด ์—๋Ÿฌ๋ฅผ ํ†ตํ•ด 'apple'์€ heap memory์— ์ด๋ฏธ ์กด์žฌํ•˜์ง€๋งŒ, ์ดˆ๊ธฐํ™”๋Š” ์ด๋ฃจ์–ด์ง€์ง€ ์•Š์•˜์Œ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

ํ•จ์ˆ˜ ํ˜ธ์ด์ŠคํŒ…

ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ์˜ ๊ฒฝ์šฐ์—๋„ ํ˜ธ์ด์ŠคํŒ…์ด ๋œ๋‹ค. ์ปดํŒŒ์ผ ๊ณผ์ •์—์„œ ํ•จ์ˆ˜๋Š” ๋ณ€์ˆ˜ ๊ฐ์ฒด์— ํ”„๋กœํผํ‹ฐ๋กœ ํ•จ์ˆ˜ ์ด๋ฆ„์ด, ๊ฐ’์œผ๋กœ๋Š” ํ•จ์ˆ˜ ๊ฐ์ฒด๊ฐ€ ๋“ฑ๋ก์ด ๋œ๋‹ค. ๋”ฐ๋ผ์„œ, ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ ์ด์ „์—๋„ ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

func(); //func ํ•จ์ˆ˜ ํ˜ธ์ถœ
function func() {
  console.log("func ํ•จ์ˆ˜ ํ˜ธ์ถœ");
}

ํ•จ์ˆ˜ ํ‘œํ˜„์‹

์ด ๋•Œ, ์ฃผ์˜ํ•  ์ ์€ ํ•จ์ˆ˜ ํ‘œํ˜„์‹์€ ๋ณ€์ˆ˜ ํ˜ธ์ด์ŠคํŒ…์œผ๋กœ ์ฒ˜๋ฆฌ๋œ๋‹ค๋Š” ์ ์ด๋‹ค. ์ฆ‰, ์ปดํŒŒ์ผ ๋  ๋•Œ ํ•จ์ˆ˜ ํ‘œํ˜„์‹์€ ๋ณ€์ˆ˜ ๊ฐ์ฒด์— ํ”„๋กœํผํ‹ฐ๋Š” ํ•จ์ˆ˜์ด๋ฆ„, ๊ฐ’์€ undefined๋กœ ๋“ฑ๋ก๋œ๋‹ค.

console.log(hello); // undefined
hello(); // TypeError: hello is not a function
var hello = function () {
  console.log("hello ํ•จ์ˆ˜ ํ˜ธ์ถœ");
};

ํ•จ์ˆ˜ ํ‘œํ˜„์‹์€ ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ ์ด์ „์— ํ˜ธ์ถœํ•˜์—ฌ๋„ ํ˜ธ์ด์ŠคํŒ… ๋˜๋ฏ€๋กœ ์ฐธ์กฐ๋Š” ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ทธ ๊ฐ’์€ undefined์ธ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ•จ์ˆ˜ ํ˜ธ์ด์ŠคํŒ… > ๋ณ€์ˆ˜ ํ˜ธ์ด์ŠคํŒ…

ํ•จ์ˆ˜ ํ˜ธ์ด์ŠคํŒ…์ด ์ผ์–ด๋‚˜๊ณ , ๊ทธ ๋‹ค์Œ ๋ณ€์ˆ˜ ํ˜ธ์ด์ŠคํŒ…์ด ์ผ์–ด๋‚œ๋‹ค.

{
  quit(); // ํ•จ์ˆ˜ ํ˜ธ์ด์ŠคํŒ… - A
  var quit = function () { // B
    console.log("๋ณ€์ˆ˜ ํ˜ธ์ด์ŠคํŒ…");
  };
  function quit() {
    console.log("ํ•จ์ˆ˜ ํ˜ธ์ด์ŠคํŒ…");
  }
  quit(); // ๋ณ€์ˆ˜ ํ˜ธ์ด์ŠคํŒ… - C
}

์ปดํŒŒ์ผ ๊ณผ์ •์—์„œ, ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ์ด ์Šค์ฝ”ํ”„์˜ ์ตœ์ƒ๋‹จ์œผ๋กœ ๋Œ์–ด์˜ฌ๋ ค์ ธ์„œ, ๋ณ€์ˆ˜ ๊ฐ์ฒด์— ํ•จ์ˆ˜์ด๋ฆ„์ธ quit๊ณผ quit ํ•จ์ˆ˜ ๊ฐ์ฒด๊ฐ€ ๋“ฑ๋ก๋œ๋‹ค. quit์ด๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ์„ ์–ธ๋ฌธ์ด ๋Œ์–ด์˜ฌ๋ ค์กŒ์œผ๋ฏ€๋กœ, quit ๋ณ€์ˆ˜ ํ˜ธ์ด์ŠคํŒ…์€ ์ผ์–ด๋‚˜์ง€ ์•Š๊ฒŒ ๋œ๋‹ค. ๋”ฐ๋ผ์„œ A์ง€์ ์—์„œ ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ํ•˜๋ฉด, ํ•จ์ˆ˜ ๊ฐ์ฒด๊ฐ€ ์‹คํ–‰๋˜์–ด 'ํ•จ์ˆ˜ ํ˜ธ์ด์ŠคํŒ…'์„ ์ถœ๋ ฅํ•œ๋‹ค. ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜๋ฉด์„œ, B์ง€์ ์— ์ด๋ฅด๊ฒŒ ๋˜๋ฉด, quit์ด๋ผ๋Š” ์ด๋ฆ„์— ์ƒˆ๋กœ์šด ํ•จ์ˆ˜๊ฐ€ ํ• ๋‹น๋œ๋‹ค. ๋”ฐ๋ผ์„œ C์ง€์ ์—์„œ๋Š” '๋ณ€์ˆ˜ ํ˜ธ์ด์ŠคํŒ…'์„ ์ถœ๋ ฅํ•˜๊ฒŒ ๋œ๋‹ค.

์ฐธ์กฐ