๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Frontend Dev/๐Ÿฅ ์ฝ”๋“œ์Šคํ…Œ์ด์ธ  FE ๋ถ€ํŠธ์บ ํ”„

Section1 Unit9 JavaScript ํ•ต์‹ฌ ๊ฐœ๋…๊ณผ ์ฃผ์š” ๋ฌธ๋ฒ• - ์ž๋ฃŒํ˜•, ์Šค์ฝ”ํ”„, ํด๋กœ์ €

๋ฐ˜์‘ํ˜•


Section1 Unit9 [JavaScript] ํ•ต์‹ฌ ๊ฐœ๋…๊ณผ ์ฃผ์š” ๋ฌธ๋ฒ• - ์ž๋ฃŒํ˜•, ์Šค์ฝ”ํ”„, ํด๋กœ์ €

 

๐Ÿ“Œ Chapter1. ์›์‹œ ์ž๋ฃŒํ˜•๊ณผ ์ฐธ์กฐ ์ž๋ฃŒํ˜•

์›์‹œ ์ž๋ฃŒํ˜•(primitive data type) : number, string, boolean, undefined, null

  → ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์‚ฌ ๋•Œ ๋ฐ์ดํ„ฐ๊ฐ’์ด ๋ณต์‚ฌ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ์กด์˜ ๋ฐ์ดํ„ฐ์— ์˜ํ–ฅ์ด ๊ฐ€์ง€ ์•Š๋Š”๋‹ค.

 

์ฐธ์กฐ ์ž๋ฃŒํ˜•(reference data type) : array, object, function

  → ๋ฐ์ดํ„ฐ ๋ณต์‚ฌ ์‹œ ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ์กด์˜ ๋ฐ์ดํ„ฐ์—๋„ ์˜ํ–ฅ์ด ๊ฐ„๋‹ค.

 

๐Ÿ“Œ Chapter2. ์Šค์ฝ”ํ”„

์Šค์ฝ”ํ”„(scope)๋Š” ๋ณ€์ˆ˜์™€ ํ•จ์ˆ˜๊ฐ€ ์œ ํšจํ•œ ๋ฒ”์œ„๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๊ทœ์น™์ด๋‹ค. ์Šค์ฝ”ํ”„๋Š” ๋ณ€์ˆ˜์™€ ํ•จ์ˆ˜๊ฐ€ ์–ธ์ œ, ์–ด๋””์„œ, ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ์ง€๋ฅผ ์ •์˜ํ•œ๋‹ค. 

• ๋ณ€์ˆ˜ ์„ ์–ธ์‹œ var๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  let๊ณผ const๋กœ ์„ ์–ธ์‹œ ๋ธ”๋ก ์Šค์ฝ”ํ”„๊ฐ€ ๋œ๋‹ค.

 ๋ธ”๋ก ์Šค์ฝ”ํ”„๋Š” ๋ชจ๋“  ์ฝ”๋“œ๋ธ”๋ก ๋‚ด์—์„œ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋Š” ์ฝ”๋“œ๋ธ”๋ก ๋‚ด์—์„œ๋งŒ ์œ ํšจํ•˜๋ฉฐ, ์™ธ๋ถ€์—์„œ๋Š” ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค.

// ๋ธ”๋ก ์Šค์ฝ”ํ”„(block scope)

if (true) {
  console.log("Hello");
}

{
  console.log("Hola");
}

// ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋Š” ๋ธ”๋ก์Šค์ฝ”ํ”„๋กœ ์ทจ๊ธ‰๋œ๋‹ค.
let getAge = user => {
  return user.age;
}

 ๋ฐ˜๋ฉด var๋Š” ๋ธ”๋ก ์Šค์ฝ”ํ”„๋Š” ๋ฌด์‹œํ•˜๊ณ (ํ™”์‚ดํ‘œ ํ•จ์ˆ˜ ์ œ์™ธ) ํ•จ์ˆ˜ ์Šค์ฝ”ํ”„๋งŒ ๋”ฐ๋ฅด๋‹ˆ, var ์‚ฌ์šฉ์€ ์ง€์–‘ํ•˜๊ณ  ES6 ๋ฌธ๋ฒ•์ธ let๊ณผ const๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋œ๋‹ค.

  ๐Ÿ’ฌ ๋‚˜๋Š” ES6 ๋ฌธ๋ฒ•์ด ๋“ฑ์žฅํ•˜๊ณ ๋„ ํ•œ์ฐธ ํ›„์— ์›น ํผ๋ธ”๋ฆฌ์‹ฑ์„ ๋ฐฐ์šฐ๋ฉด์„œ ์ž ๊น ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ฐœ๋‹ด๊ทธ๊ธฐ ์‹์œผ๋กœ ๋ฐฐ์› ์—ˆ๋Š”๋ฐ, ๋ณ€์ˆ˜ ์„ ์–ธ์„ var๋กœ ๋ฐฐ์› ๋˜ ๊ธฐ์–ต์ด ์žˆ๋‹ค. ์ง€๊ธˆ์€ let๊ณผ const๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ์ด์œ ๋ฅผ ์•Œ๊ณ , ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์ง€๋งŒ ์™œ ๊ตณ์ด ๊ทธ๋•Œ var๋กœ ๊ฐ€๋ฅด์ณ์ค€๊ฑด์ง€๋Š” ์˜๋ฌธ์ด๋‹ค. ์‹ฌ์ง€์–ด ๋ฐฐ์šฐ๊ธฐ์— ๋” ๋ช…ํ™•ํ•œ ๊ฒƒ๋„ let๊ณผ const์ธ๋ฐ.

 

๐Ÿ“Œ Chapter3. ํด๋กœ์ €

ํด๋กœ์ €(closure)๋ž€ ์‰ฝ๊ฒŒ ๋งํ•ด์„œ ํ•จ์ˆ˜์™€ ๊ทธ ํ•จ์ˆ˜๊ฐ€ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ณ€์ˆ˜์˜ ์กฐํ•ฉ์ด๋‹ค.

• ํด๋กœ์ €์˜ ํ•จ์ˆ˜๋Š” ์–ด๋””์—์„œ ํ˜ธ์ถœ๋˜๋Š๋ƒ์™€ ๋ฌด๊ด€ํ•˜๊ฒŒ ์„ ์–ธ๋œ ํ•จ์ˆ˜ ์ฃผ๋ณ€ ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ณ€์ˆ˜๊ฐ€ ์ •ํ•ด์ง„๋‹ค.

 

 

โœ”๏ธ Checkpoint ์ข…ํ•ฉํ€ด์ฆˆ

 ์ด์ „ ์œ ๋‹›๊นŒ์ง€๋Š” ์ข…ํ•ฉํ€ด์ฆˆ ๋ฌธ์ œ๋ฅผ ๋ฌด๋‚œํžˆ ์ดํ•ด ์ž˜ ํ•˜๊ณ  ๋„˜์–ด๊ฐ”์—ˆ๋Š”๋ฐ, ์˜ค๋Š˜์€ ๊ฐœ๋… ์ž์ฒด๊ฐ€ ์ข€ ์–ด๋ ค์›Œ์„œ ๊ทธ๋Ÿฐ์ง€ ์ข…ํ•ฉํ€ด์ฆˆ๋„ ์–ด๋ ค์› ๋‹ค. ๊ทธ๋ž˜์„œ ํ—ท๊ฐˆ๋ ธ๋˜ ๋ถ€๋ถ„์„ ์ •๋ฆฌ๋ฅผ ํ•ด๋ดค๋‹ค.

 

1. ์Šค์ฝ”ํ”„ ๊ด€๋ จ ๋ฌธ์ œ

// result์˜ ๊ฐ’์€?

let x = 10;

function outer () {
  x = 20;

  function inner () {
    let x
    x = x + 20;
    return x;
  }
  inner(); // NaN
}

outer();
let result = x; // 20

 → outer ํ•จ์ˆ˜๋Š” ์ „์—ญ ๋ณ€์ˆ˜ x์— 20์„ ์žฌํ• ๋‹นํ•œ๋‹ค. outer ๋‚ด๋ถ€์—์„œ inner ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๊ณ  ์žˆ์ง€๋งŒ, inner ํ•จ์ˆ˜๋Š” ๋ฐ”๊นฅ ์Šค์ฝ”ํ”„์— ์•„๋ฌด๋Ÿฐ ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š๋Š”๋‹ค.

 inner ํ•จ์ˆ˜๋Š” ๊ฐ’์„ ํ• ๋‹นํ•˜์ง€ ์•Š์€ x๋ฅผ ์ˆซ์ž 20๊ณผ ๋”ํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ, NaN๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

 

2. ํด๋กœ์ € ๊ด€๋ จ ๋ฌธ์ œ

 ์ด ๋ฌธ์ œ๋Š” ์•„์˜ˆ ๋ชปํ’€๊ณ , ์ฝ”๋“œ ๋Œ๋ ค์„œ ๋‹ต์„ ํ™•์ธํ–ˆ๋˜ ๋ฌธ์ œ๋‹ค. ๋‹ค์‹œ ์ƒ๊ฐํ•˜๋ฉด์„œ ์ •๋ฆฌํ•ด๋ณด๋‹ˆ ์ดํ•ด๊ฐ€ ๋˜์—ˆ๋‹ค. 

// total์˜ ๊ฐ’์€?

let add = function(x) {
  let sum = function(y) {
    return x + y;
  }
  return sum;
}

let foo = add(1); // foo๋Š” sum ํ•จ์ˆ˜
foo(3); // x=1, y=3
let total = foo(6); // x=1, y=6 → total์€ 7

 → ํ•จ์ˆ˜ add๋Š” x๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ํ•˜์—ฌ sum์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 ์ฒ˜์Œ์— foo๋Š” sumํ•จ์ˆ˜๋ฅผ return ํ•˜๊ณ , total์€ ์œ„ ์ฃผ์„๋Œ€๋กœ 7์ด ๋œ๋‹ค. (total์˜ ๊ฐ’์ธ foo(6)์€ add(1)(6)๊ณผ ๊ฐ™๋‹ค.)

 ์—ฌ๊ธฐ์„œ foo(3)์€ 4๋ฅผ ๋ฐ˜ํ™˜ํ•˜์ง€๋งŒ ์–ด๋– ํ•œ ๋ณ€์ˆ˜์—๋„ ํ• ๋‹น์ด ๋˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ total์— ์•„๋ฌด๋Ÿฐ ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š๋Š”๋‹ค.

 


๐ŸŒ™  ์˜ค๋Š˜์˜ ํšŒ๊ณ 

 ์˜ค๋Š˜ ํ•™์Šตํ•œ ๋‚ด์šฉ ์ค‘์— ํด๋กœ์ €์˜ ๊ฐœ๋…๊ณผ ํ™œ์šฉ์ด ์–ด๋ ค์› ๋‹ค. ํด๋กœ์ €๋ฅผ ์ดํ•ดํ•˜๋ ค๊ณ  ๋ ‰์‹œ์ปฌ ํ™˜๊ฒฝ์„ ์„ค๋ช…ํ•˜๋Š” ๊ธ€๋„ ์ฝ์—ˆ๋Š”๋ฐ ์ฝ๋‹ค๋ณด๋‹ˆ ๋„ˆ๋ฌด ์กธ๋ ค์„œ ์ง‘์ค‘๋„๊ฐ€ ํ™• ๋–จ์–ด์กŒ๋‹ค… ๐Ÿ˜ญ ๊ทธ๋ž˜๋„ ๊ณ„์† ์ฝ์–ด๋ณด๊ณ , ๋ผ์ด๋ธŒ ์„ธ์…˜๋•Œ ๋ฐฐ์› ๋˜ ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋””๋ฒ„๊ฑฐ ๋Œ๋ฆฌ๋Š” ๊ฒƒ๋„ ํ•ด๋ณด๊ณ (๋””๋ฒ„๊ฑฐ ํ™œ์šฉ๋ฒ•์„ ์ด์ œ์•ผ ์•Œ์•˜๋Š”๋ฐ ์‚ฌ์šฉํ•˜๋Š”๊ฒŒ ์•„์ง ์ต์ˆ™์น˜ ์•Š์€ ๊ฒƒ ๊ฐ™๋‹ค), ์ด๋ž˜์ €๋ž˜ ์ดํ•ดํ•˜๋ ค๊ณ  ์• ์“ฐ๋‹ˆ ์กฐ๊ธˆ์€ ์ดํ•ด๊ฐ€ ๋œ ๊ฒƒ ๊ฐ™์•˜๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋ณธ ๋ฌธ๋ฒ•๋งŒ ์•Œ์•˜์ง€, ์ด๋Ÿฐ ๋™์ž‘ ์›๋ฆฌ? ๊ฐ™์€๊ฑด ๊ฑฐ์˜ ๋ฌด์ง€ํ•œ ์ˆ˜์ค€์ด์—ˆ๋Š”๋ฐ ๊ณต๋ถ€ํ•˜๋‹ค๋ณด๋‹ˆ ๋„ˆ๋ฌด ์žฌ๋ฏธ์žˆ๋Š” ๊ฒƒ ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ์€ ๋“ค์—ˆ๋‹ค. (์žฌ๋ฐŒ๋Š”๋ฐ ์กธ๋ ค…๐Ÿซ ) ์Šค์ฝ”ํ”„๋“ , ํด๋กœ์ €์ด๋“  ๋” ๊ณต๋ถ€ํ•ด์•ผ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค.

 ์•„, ๊ทธ๋ฆฌ๊ณ  ์˜ˆ์ „๋ถ€ํ„ฐ ๊ณต๋ถ€ํ• ๋•Œ ์˜ˆ์ œ ํ•จ์ˆ˜ ๋ช…์œผ๋กœ “foo”๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฑธ ์ž์ฃผ ๋ดค์—ˆ๋Š”๋ฐ, foo๊ฐ€ ์™ ์ง€ ์–ด๊ฐ์ด ๋ฐ”๋ณด๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์–ด์„œ ์™œ foo๋ฅผ ์“ฐ์ง€? ํ•˜๊ณ  ๊ถ๊ธˆํ–ˆ๋˜ ์ ์ด ์žˆ์—ˆ๋‹ค. ์˜ค๋Š˜ ๋“œ๋””์–ด ์“ธ๋ฐ์—†๋Š” ๊ถ๊ธˆํ•จ์„ ๋ฏธ๋ฃจ์ง€ ์•Š๊ณ  ChatGPT ํ•œํ…Œ ๋ฌผ์–ด๋ดค๋Š”๋ฐ “foo”๋Š” “function object”์˜ ์•ฝ์–ด๋กœ ์ผ๋ฐ˜์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋‚˜ ์˜ˆ์ œ ์ฝ”๋“œ์—์„œ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ์ผ์ข…์˜ ๊ด€์šฉ๊ตฌ๋ผ๊ณ  ํ•œ๋‹ค. ์Œ, ๊ทผ๋ฐ ๊ตฌ๊ธ€๋ง ํ•ด๋ณด๋‹ˆ function object์˜ ์•ฝ์–ด์ธ์ง€๋Š” ์ž˜ ๋ชจ๋ฅด๊ฒ ๊ณ , ์ปดํ“จํ„ฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ๊ฒฌ๋ณธ์šฉ ์ด๋ฆ„์œผ๋กœ foo, bar ๋“ฑ์„ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ•œ๋‹ค. ๋‚˜๋ฆ„ ์žฌ๋ฐŒ๋Š” ํžˆ์Šคํ† ๋ฆฌ๊ฐ€ ์žˆ๋Š”๊ฒƒ ๊ฐ™์€๋ฐ, ์—ฌํŠผ ๋ญ ์˜ˆ์‹œ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์ปจ๋ฒค์…˜ ๊ฐ™์€ ๊ฑฐ๋ผ๊ณ  ํ•œ๋‹ค.

๋ฐ˜์‘ํ˜•