Scope(2) - Scope์˜ ์˜ค์—ผ ๐Ÿค”

wldlsยท2023๋…„ 5์›” 4์ผ
0

javascript

๋ชฉ๋ก ๋ณด๊ธฐ
31/33
post-thumbnail

์ด์ „๊ธ€์€ ์š”๊ธฐ๋กœ! ๐Ÿ‘‰ Scope(1)

ย 

Scope์˜ ์˜ค์—ผ . . .

โ“ ์Šค์ฝ”ํ”„๊ฐ€ ์˜ค์—ผ ๋œ๋‹ค๋Š” ๋ง์€ ๋ฌด์Šจ ๋ง์ผ๊นŒ ?

global ๋ณ€์ˆ˜๋ฅผ ์“ฐ๋ฉด ์—ฌ๊ธฐ ์ €๊ธฐ์„œ ์ ‘๊ทผํ•˜๊ธฐ ์‰ฌ์›Œ์„œ ์ข‹๋‹ค๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ,
๋„ˆ๋ฌด ๋‚จ์šฉํ•˜๋ฉด ํ”„๋กœ๊ทธ๋žจ์— ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ๋‹ค

global ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋ฉด, ํ•ด๋‹นํ”„๋กœ๊ทธ๋žจ์˜ ์–ด๋””์—์„œ๋‚˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”ย global namespace๋ฅผ ๊ฐ–๊ฒŒ ๋˜๋Š”๋ฐ

namespace๋ผ๋Š” ๊ฒƒ์€ ๋ณ€์ˆ˜ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒ”์œ„๋ผ๋Š” ๋œป
scope๋ผ๊ณ ๋„ ํ•˜๊ณ  ํŠนํžˆ ๋ณ€์ˆ˜์ด๋ฆ„์„ ์–˜๊ธฐํ•  ๋•Œ๋Š” namespace๋ผ๊ณ ๋„ ํ•œ๋‹ค

global ๋ณ€์ˆ˜๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๊ณ„์† ์‚ด์•„์žˆ๋‹ค.
์ด ๋ง์€ local ๋ณ€์ˆ˜๋Š”ย {}(block)์ด ๋๋‚˜๋ฉด ๋” ์ด์ƒ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๋ง์ธ ๊ฒƒ

global ๋ณ€์ˆ˜๊ฐ€ ๊ณ„์† ์‚ด์•„์žˆ์–ด์„œ ๋ณ€์ˆ˜๊ฐ’์ด ๊ณ„์† ๋ณ€ํ•œ๋‹ค๋ฉด ํ•ด๋‹น ๋ณ€์ˆ˜๋ฅผ ํŠธ๋ž˜ํ‚นํ•˜๊ธฐ๋„ ์–ด๋ ต๊ณ 
์ด ๋ณ€์ˆ˜๊ฐ€ ์–ด๋””์—์„œ ์™œ ํ•„์š”ํ•œ์ง€ ์•Œ๊ธฐ ์œ„ํ•ด์„œ๋Š”ย let,ย const์˜ ์„ ์–ธ๋ถ€๊นŒ์ง€ ์ฐพ์•„์„œ
ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค

์•„๋ž˜๋Š” scope๊ฐ€ ์˜ค์—ผ๋œ ๋Œ€ํ‘œ์ ์ธ ์˜ˆ

const satellite = 'The Moon';
const galaxy = 'The Milky Way';
let stars = 'North Star';

const callMyNightSky = () => {
  stars = 'Sirius';

  return 'Night Sky: ' + satellite + ', ' + stars + ', ' + galaxy;
};

console.log(callMyNightSky());
console.log(stars);
  • callMyNightSkyย ํ•จ์ˆ˜์—์„œ ์ƒˆ๋กœ์šด ๋ณ€์ˆ˜๋ฅผย letย ํ‚ค์›Œ๋“œ๋ฅผ ์„ ์–ธํ•˜์ง€ ์•Š์•˜๋‹ค
  • callMyNightSkyย ์„ ํ˜ธ์ถœํ•˜๋ฉด stars ๋ณ€์ˆ˜์—ย "Sirius"ย ์ด ํ• ๋‹น๋œ๋‹ค
  • global ๋ณ€์ˆ˜์˜€๋˜ย starsย ์— ์˜ํ–ฅ์ด ๊ฐ„๋‹ค
  • ๋‹ค๋ฅธ ํ•จ์ˆ˜์—์„œ global ๋ณ€์ˆ˜์ธย starsย ์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์€๋ฐ ๊ฐ’์ด ์ˆ˜์ •๋œย "Sirius"ย ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค

์กฐ์‹ฌ โ—
์ด๋ ‡๋“ฏ global ๋ณ€์ˆ˜๋ฅผ ๋‚จ์šฉํ•œ๋‹ค๋ฉด ์–ด๋””์„œ ์–ด๋–ป๊ฒŒ ๊ฐ’์ด ์ˆ˜์ •๋˜๋Š”์ง€ ์ถ”์ ํ•˜๊ธฐ ์–ด๋ ค์›Œ์ง€๊ฒŒ ๋œ๋‹ค

ย 

๐Ÿ‘‰ ์˜ค์—ผ์— ๋Œ€ํ•ด์„œ๋„ ์•Œ์•„๋ดค์œผ๋‹ˆ,
์ด์ œ ์Šค์ฝ”ํ”„์— ๋Œ€ํ•ด ๋ฌธ์ œ๋ฅผ ํ†ตํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด์ž
์•„๋ž˜๋Š” ์Šค์ฝ”ํ”„ ๋ฌธ์ œ์ด๋‹ค ํ•จ๊ป˜ ํ’€์–ด๋ณด์ž ๐Ÿ’ก

์Šค์ฝ”ํ”„๋ž€? ->

let x = 100; // ๋ธ”๋ก{} ๋ฐ–์— ์„ ์–ธํ•˜๋ฉด ์ „์—ญ์—์„œ ์ ‘๊ทผํ• ์ˆ˜ ์žˆ๋Š” ๋ณ€์ˆ˜๊ฐ€ ๋œ๋‹ค = ์ „์—ญ๋ณ€์ˆ˜
      function ํ•จ์ˆ˜() {
        let y = 20; // ๋ธ”๋ก{} ์•ˆ์— ์„ ์–ธ์‹œ ๋ฐ–์—์„œ ์ ‘๊ทผ ๋ถˆ๊ฐ€๋Šฅ = ์ง€์—ญ๋ณ€์ˆ˜
        console.log(x); // x๊ฐ€ ์—†์œผ๋‹ˆ ์œ„๋กœ ์˜ฌ๋ผ๊ฐ€์„œ ์ฐพ๋Š”๋‹ค = ์Šค์ฝ”ํ”„ ์ฒด์ด๋‹
      }
      ํ•จ์ˆ˜(); // 100 -> ๋ณ€์ˆ˜ x๋Š” ์ „์—ญ๋ณ€์ˆ˜์ด๋‹ค

      // ํ•จ์ˆ˜1 ์˜ ๊ฐ’์€ ?
      let a = 10; 
      let b = 10;
      function ํ•จ์ˆ˜1() {
        let a = 20;
        let b = 20;
        function ํ•จ์ˆ˜2() {

          let a = 30;
          console.log(a, b, c);
        }
        ํ•จ์ˆ˜2();
      }
      ํ•จ์ˆ˜1();

์•„๋ž˜๋Š” ํ’€์ด๋ฅผ ํ™•์ธ ํ• ์ˆ˜์žˆ๋‹ค

์Šค์ฝ”ํ”„๋ž€?
๋ณ€์ˆ˜์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ์œ ํšจ๋ฒ”์œ„, ๋ณ€์ˆ˜์˜ ์ ‘๊ทผ์„ฑ๊ณผ ์ƒ์กด ๊ธฐ๊ฐ„์„ ์ œ์–ดํ•˜๋Š” โ€˜์ƒ์กด ๋ฒ”์œ„โ€™๋ฅผ ์˜๋ฏธ
์Šค์ฝ”ํ”„ ์ฒด์ด๋‹์ด๋ž€ ?
์Šค์ฝ”ํ”„๊ฐ€ ์–ด๋–ป๊ฒŒ ์—ฐ๊ฒฐ(chain)๋˜๊ณ  ์žˆ๋Š”์ง€ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ,
ํ•ด๋‹น ์˜์—ญ์— ์ฐพ๋Š” ๋ณ€์ˆ˜๊ฐ€ ์—†์œผ๋ฉด ๊ณ„์†ํ•ด์„œ ์ƒ์œ„ ์Šค์ฝ”ํ”„๋ฅผ ๋”ฐ๋ผ ์˜ฌ๋ผ๊ฐ„๋‹ค
window ๊นŒ์ง€ ๋”ฐ๋ผ ์˜ฌ๋ผ๊ฐ€๋„ ์—†์œผ๋ฉด error

  let x = 100; // ๋ธ”๋ก{} ๋ฐ–์— ์„ ์–ธํ•˜๋ฉด ์ „์—ญ์—์„œ ์ ‘๊ทผํ• ์ˆ˜ ์žˆ๋Š” ๋ณ€์ˆ˜๊ฐ€ ๋œ๋‹ค = ์ „์—ญ๋ณ€์ˆ˜
  function ํ•จ์ˆ˜() {
    let y = 20; // ๋ธ”๋ก{} ์•ˆ์— ์„ ์–ธ์‹œ ๋ฐ–์—์„œ ์ ‘๊ทผ ๋ถˆ๊ฐ€๋Šฅ = ์ง€์—ญ๋ณ€์ˆ˜
    console.log(x); // x๊ฐ€ ์—†์œผ๋‹ˆ ์œ„๋กœ ์˜ฌ๋ผ๊ฐ€์„œ ์ฐพ๋Š”๋‹ค = ์Šค์ฝ”ํ”„ ์ฒด์ด๋‹
  }
  ํ•จ์ˆ˜(); // 100 -> ๋ณ€์ˆ˜ x๋Š” ์ „์—ญ๋ณ€์ˆ˜์ด๋‹ค
  
  

  // ํ•จ์ˆ˜1 ์˜ ๊ฐ’์€ ?
  let a = 10; // a=10,b=10,ํ•จ์ˆ˜1 ์˜ ๊ฐ๊ฐ์˜ ๋ฉ”๋ชจ๋ฆฌ๊ณต๊ฐ„์ด ์žˆ๋‹ค
  let b = 10;
  function ํ•จ์ˆ˜1() {
    // ํ•จ์ˆ˜1์€ a=20, b=20,ํ•จ์ˆ˜2์— ์—ฐ๊ฒฐ๋˜์–ด์žˆ๋‹ค
    let a = 20;
    let b = 20;
    function ํ•จ์ˆ˜2() {
      //ํ•จ์ˆ˜2๋Š” a=30 ์— ์—ฐ๊ฒฐ๋˜์–ด์žˆ๋‹ค
      // ์—ฌ๊ธฐ์„œ ๋งŒ์•ฝ ๋ณ€์ˆ˜ c๋ฅผ ์ฐพ์œผ๋ฉด ์Šค์ฝ”ํ”„ ์ฒด์ด๋‹(์˜ฌ๋ผ๊ฐ€๋ฉฐ c๋ฅผ ์ฐพ๋Š”๋‹ค)ํ•œ๋‹ค
      let a = 30;
      console.log(a, b, c);
    }
    ํ•จ์ˆ˜2();
  }
  ํ•จ์ˆ˜1(); // 30 20
profile
๋‹ค์–‘ํ•œ ๋ณ€ํ™”์™€ ๋„์ „ํ•˜๋Š” ์ž์„ธ๋กœ

0๊ฐœ์˜ ๋Œ“๊ธ€