๐Ÿ€ ๊ธฐ์ˆ ์ฑ… ์Šคํ„ฐ๋””

23๋…„ 1์›”๋ถ€ํ„ฐ ํ™œ๋™ ์ค‘์ธ ๊ต์œก์—์„œ, ๋œป์ด ๋งž๋Š” ๋™๋ฃŒ๋“ค๊ณผ ํ•จ๊ป˜ ์ง„ํ–‰ํ•˜๊ฒŒ ๋œ ์Šคํ„ฐ๋””
์ฒ˜์Œ ์ฝ”์–ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์„œ์ ์„ ์ฝ์ž๊ณ  ์ œ์•ˆํ•˜๋ฉด์„œ ์‹œ์ž‘!
์•ž์œผ๋กœ๋„ ๊พธ์ค€ํžˆ ๊ธฐ์ˆ  ์„œ์ ์„ ์ฝ๊ณ  ํ•จ๊ป˜ ๋ฐœ์ „ํ•˜๋Š” ์‹œ๊ฐ„์ด ๋˜์—ˆ์œผ๋ฉด ์ข‹๊ฒ ๋‹ค!

์ฑ…์— ์žˆ๋Š” ๋‚ด์šฉ๋ณด๋‹จ, ์ฝ์œผ๋ฉด์„œ ํ˜ผ์ž ์ •๋ฆฌํ•œ ๋‚ด์šฉ๋“ค ์œ„์ฃผ๋กœ ์ž‘์„ฑํ•˜์ž!

๐Ÿ… ์ฝ”์–ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ 2. ์‹คํ–‰ ์ปจํ…์ŠคํŠธ

์ผ์‹œ: 1์›” 29์ผ 19์‹œ


์‹คํ–‰ ์ปจํ…์ŠคํŠธ

  • ์‹คํ–‰ํ•  ์ฝ”๋“œ์— ์ œ๊ณตํ•  ํ™˜๊ฒฝ ์ •๋ณด๋“ค์„ ๋ชจ์•„๋†“์€ ๊ฐ์ฒด
  • ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๊ฐ€ ํ™œ์„ฑํ™”๋˜๋Š” ์‹œ์ ์— ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋ฅผ ์œ„๋กœ ๋Œ์–ด์˜ฌ๋ฆฌ๊ณ (ํ˜ธ์ด์ŠคํŒ…), ์™ธ๋ถ€ ํ™˜๊ฒฝ ์ •๋ณด๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ , this ๊ฐ’์„ ์„ค์ •ํ•˜๋Š” ๋“ฑ์˜ ๋™์ž‘์„ ์ˆ˜ํ–‰
  • ์‹คํ–‰ ์ปจํ…์ŠคํŠธ ๊ตฌ์„ฑ ๋ฐฉ๋ฒ•: ์ „์—ญ๊ณต๊ฐ„, eval() ํ•จ์ˆ˜, ํ•จ์ˆ˜
  • ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์˜ค๋กœ์ง€ ํ•จ์ˆ˜ ์‹คํ–‰
  • ์ตœ์ƒ๋‹จ์˜ ๊ณต๊ฐ„(์ „์—ญ๊ณต๊ฐ„)์€ ์ฝ”๋“œ ๋‚ด๋ถ€์—์„œ ๋ณ„๋„์˜ ์‹คํ–‰์ด ์—†์–ด๋„ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ž๋™์œผ๋กœ ์‹คํ–‰ํ•˜์—ฌ ์ „์—ญ ์ปจํ…์ŠคํŠธ๋ฅผ ๋งŒ๋“ ๋‹ค.(anonymous)
  • ์ฝœ ์Šคํƒ์˜ ๊ฐ€์žฅ ์œ„(๋งˆ์ง€๋ง‰) ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๊ฐ€ ์Œ“์ด๋Š” ์ˆœ๊ฐ„์ด ํ˜„์žฌ ์ฝ”๋“œ์— ๊ด€์—ฌํ•˜๊ฒŒ ๋˜๋Š” ์‹œ์ 
  • ์‹คํ–‰ ์ปจํ…์ŠคํŠธ ๊ฐ์ฒด 3ํ˜•์ œ
    • VariableEnvironment: ์ดˆ๊ธฐ ํ™˜๊ฒฝ ๊ฐ์ฒด
      • environmentRecord: ๋‚ด๋ถ€ ํ™˜๊ฒฝ ์ •๋ณด
      • outerEnvironmentRecord: ์™ธ๋ถ€ ํ™˜๊ฒฝ ์ •๋ณด
    • LexicalEnvironment: ์‹คํ–‰ํ•จ์— ๋”ฐ๋ผ ๋ณ€ํ•˜๋Š” ๊ฐ์ฒด
      • environmentRecord: ๋‚ด๋ถ€ ํ™˜๊ฒฝ ์ •๋ณด
      • outerEnvironmentRecord: ์™ธ๋ถ€ ํ™˜๊ฒฝ ์ •๋ณด
    • ThisBinding: this๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ฐ์ฒด

Quiz 1) p37. ์ „์—ญ๊ณต๊ฐ„ ๊ด€๋ จ ๋ฐ˜๋ณต๋ฌธ

// 1๋ฒˆ var
for (var i = 0; i < 5; i++) {
	console.log(i);
	}

// 2๋ฒˆ let
for (let i = 0; i < 5; i++) {
	console.log(i);
	}

// 3๋ฒˆ const
for (const i = 0; i < 5; i++) {
	console.log(i);
	}

// 4๋ฒˆ ์—†์Œ
for (i = 0; i < 5; i++) {
	console.log(i);
	}

ํ˜ธ์ด์ŠคํŒ…

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋ฅผ ๊ตฌ์„ฑํ•œ ๋’ค ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๋Š” ๋…ํŠนํ•œ ๊ตฌ์กฐ ๋•๋ถ„์— ์ƒ๊ธฐ๋Š” ํ˜„์ƒ

  • ๋ณ€์ˆ˜์˜ ์„ ์–ธ๋ถ€, ํ•จ์ˆ˜ ์ „์ฒด(ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ ํ•œ์ •)๊ฐ€ ๋งˆ์น˜ ์ฝ”๋“œ ์ œ์ผ ์œ„์—์„œ ์‹คํ–‰๋˜๋Š” ๋Š๋‚Œ

    โ†’ ์ด๋ ‡๊ฒŒ ์ƒ๊ฐํ•ด์•ผ ์šฐ๋ฆฌ๊ฐ€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์˜ ์ฝ”๋“œ ํ•ด์„ ์ˆœ์„œ๋ฅผ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.

Quiz 2) p42. ์˜ˆ์ œ 2-2

function a(x) {
	console.log(x); // (1)
	var x;
	console.log(x); // (2)
	var x = 2;
	console.log(x); // (3)
}

a(1116);

์Šค์ฝ”ํ”„

  • ์‹๋ณ„์ž์— ๋Œ€ํ•œ ์œ ํšจ๋ฒ”์œ„
  • ์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด ์–ด๋–ค ๋ณ€์ˆ˜๊ฐ€ ์†ํ•œ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ ๋ผ๊ณ  ์ƒ๊ฐํ•ด๋„ ๋ฌด๋ฐฉ
  • ์Šค์ฝ”ํ”„ ์ฒด์ธ โ‡’ ๊ฐ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋งˆ๋‹ค ์„ ์–ธ ๊ธฐ์ค€ ์ƒ์œ„ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๋Šฅํ•˜๋‹ค.

Quiz 3) p53. ์Šค์ฝ”ํ”„ ์ฒด์ธ

function a() {
  var answer = 1;
  function c() {
      console.log(answer);
    }
  function b() {
    var answer = 2;
    c();
  }
  b();
}

a();

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

p62 ~ p63) ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•ด๋ณด๊ธฐ

function X(a, b) {
  const sum = function (a, b) {
    return a + b;
  }
  return sum(a, b);
}

function sum(c, d) {
  return `${c} + ${d} = ${c + d}`
}

// X(3, 4) => 7
// sum(3, 4) => '3 + 4 = 7'

// ์—ฌ๊ธฐ์„œ ๋” ๋‚˜์•„๊ฐ€์„œ ์ข€๋” ์•ˆ์ •์ ์œผ๋กœ ํ•˜๋ ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ํ‘œํ˜„์‹ ์‚ฌ์šฉ
const X = (a, b) => {// ...code}

๋งˆ๋ฌด๋ฆฌ

๊ผญ ์ฐพ์•„๋ณด๊ณ  ์ƒ๊ฐํ•ด๋ณด๊ธฐ

1. var, let, const

  • ํ˜ธ์ด์ŠคํŒ…๊ณผ ๊ด€๋ จ ์ง€์–ด์„œ ์ฐพ์•„๋ณด๊ธฐ
  • ์„ ์–ธ, ์ดˆ๊ธฐํ™”, ์žฌํ• ๋‹น์˜ ๊ฐœ๋…

2. ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ, ํ•จ์ˆ˜ ํ‘œํ˜„์‹, ํ™”์‚ดํ‘œ ํ•จ์ˆ˜ ์ฐจ์ด์ 

  • ํ˜ธ์ด์ŠคํŒ…๊ณผ ๊ด€๋ จ ์ง€์–ด์„œ ์ฐพ์•„๋ณด๊ธฐ
  • this์™€ ๊ด€๋ จ ์ง€์–ด์„œ ์ฐพ์•„๋ณด๊ธฐ

๊ฐ™์ด ์ƒ๊ฐํ•ด๋ณด๊ณ  ์‹ถ์€ ์ 

1. VariableEnvironment์™€ LexicalEnvironment๋ฅผ ๊ตณ์ด ๋‚˜๋ˆ„๋Š” ์ด์œ ๊ฐ€ ๋ญ˜๊นŒ์š”?