๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐ŸŒŒ | WEB DEV/Vanilla JS

JS_๊ธฐ๋ณธ ๋ฌธ๋ฒ• (17)_์Šค์ฝ”ํ”„

by KASSID 2023. 3. 3.

๋ชฉ์ฐจ

    728x90

    JS์—์„œ์˜ ์Šค์ฝ”ํ”„์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž!

     

    1. ๋ธ”๋ก๋ฌธ (Block)

    ๋ธ”๋ก๋ฌธ์€ 0๊ฐœ ์ด์ƒ์˜ statement(๊ตฌ๋ฌธ)์„ ๋ฌถ์€ ๊ฒƒ์„ ์ด์•ผ๊ธฐํ•˜๊ณ ,

    ํ•œ ์Œ์˜ ์ค‘๊ด„ํ˜ธ(brackets)๋กœ ๊ฐ์‹ธ์ ธ์žˆ๋‹ค.

    {
    	...
    }

     

    ์ผ๋ฐ˜์ ์œผ๋กœ ์ œ์–ด๋ฌธ, ํ•จ์ˆ˜ ๋“ฑ์— ์‚ฌ์šฉ์ด ๋˜๊ณ 

    ๋ธ”๋ก๋ฌธ์€ ์ƒˆ๋กœ์šด ์Šค์ฝ”ํ”„๋ฅผ ์ƒ์„ฑํ•œ๋‹ค

     

    1) ์Šค์ฝ”ํ”„ (Scope)

    ์Šค์ฝ”ํ”„๋ž€ ๋ณ€์ˆ˜๋‚˜ ์ƒ์ˆ˜, ์‹๋ณ„์ž๋“ค์ด ์œ ํšจํ•˜๊ฒŒ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋Š” ๋ฒ”์œ„๋ฅผ ๋งํ•œ๋‹ค.

    ์ฆ‰, ๋ธ”๋ก๋ฌธ์„ ์ƒ์„ฑํ•  ๊ฒฝ์šฐ ์ƒˆ๋กœ์šด ๋ฒ”์œ„๋ฅผ ์ƒ์„ฑํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

     

    ํŠน์ง• 1_ ๋ธ”๋ก ์•ˆ์— ์„ ์–ธ๋œ ๋ณ€์ˆ˜์™€ ์ƒ์ˆ˜๋ฅผ ๊ทธ ๋ฐ–์—์„œ ์‚ฌ์šฉ ๋ถˆ๊ฐ€

    {
      let x = 1;
      console.log(x);
    }
    console.log(x);
    
    >>> 1
    >>> Uncaught ReferenceError: x is not defined

    ์œ„์˜ ์˜ˆ์‹œ์ฒ˜๋Ÿผ ๋ธ”๋ก ์•ˆ์— ์„ ์–ธ๋œ ๋ณ€์ˆ˜์™€ ์ƒ์ˆ˜๋ฅผ ๊ทธ ๋ฐ–์—์„œ๋Š” ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€ํ•˜๋‹ค.

     

    ํŠน์ง• 2_ ๋ธ”๋ก ์•ˆ์ชฝ์—์„œ๋Š” ๋ฐ–์—์„œ ์„ ์–ธ๋œ ๊ฒƒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

    let x = 1;
    {
      console.log(x);
    }
    console.log(x);
    
    >>> 1
    >>> 1

    ์œ„์ฒ˜๋Ÿผ ๋ธ”๋ก ์•ˆ์ชฝ์—์„œ๋„ ๋ฐ–์—์„œ ์„ ์–ธ๋œ ๊ฒƒ์— ์ ‘๊ทผ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

     

    ํŠน์ง• 3_ ๋ธ”๋ก ์•ˆ์ชฝ์—์„œ ์ƒˆ๋กœ ์„ ์–ธ๋  ๊ฒฝ์šฐ ๋ฐ”๊นฅ ๊ฒƒ ์œ„์— ๋ฎ์–ด์”Œ์›€

    ํ• ๋‹น์ด ์•„๋‹Œ ์„ ์–ธ์— ๊ด€ํ•œ ํŠน์ง•์ด๋‹ค.

    const x = 0;
    let y = 'A';
    console.log(x, y);
    
    {
      const x = 1; // ์ƒ์ˆ˜๋„ ์žฌ์„ ์–ธ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
      let y = 'B';
    
      console.log(x, y);
    }
    
    console.log(x, y);
    
    >>> 0 'A'
    >>> 1 'B'
    >>> 0 'A'

    ์œ„์˜ ๊ฒฐ๊ณผ๋ฅผ ํ†ตํ•ด ์•Œ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€

    ๋ธ”๋ก ์•ˆ์—์„œ๋Š” ๋ฐ–์—์„œ ์ด๋ฏธ ์‚ฌ์šฉํ•œ '์ด๋ฆ„'์„ ๋‹ค์‹œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

    ์ƒ์ˆ˜๋‚˜ ๋ณ€์ˆ˜์— ๊ตฌ๋ถ„ ์—†์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

     

    ๋ธ”๋ก ์•ˆ์—์„œ ์ ‘๊ทผ ์‹œ ์ฃผ์˜ํ•  ์ 

    ์ƒ์ˆ˜์ผ ๊ฒฝ์šฐ์—๋Š” ๋‹น์—ฐํžˆ ์žฌํ• ๋‹น์ด ๋ถˆ๊ฐ€ํ•˜๋‹ค.

    const x = 0;
    
    {
      x = 1; // ์ƒ์ˆ˜์— ์ƒˆ๋กœ ํ• ๋‹นํ•  ์ˆ˜ ์—†๋‹ค.
    
      console.log(x);
    }
    
    >>> Uncaught TypeError: Assignment to constant variable.

     

    ๋ธ”๋ก ์•ˆ์—์„œ ๊ธฐ์กด ๋ณ€์ˆ˜์— ๊ฐ’์„ ํ• ๋‹นํ•  ๊ฒฝ์šฐ

    ์žฌ์„ ์–ธ์ด ์•„๋‹ˆ๋ฏ€๋กœ ๋ฐ–์˜ ๋ณ€์ˆ˜ ๊ฐ’์„ ๋ฐ”๊พธ๋Š” ๊ฒƒ์ด๋‹ค.

    let y = 0;
    
    console.log(y);
    
    {
      y = 1; // ์ƒ์ˆ˜์— ์ƒˆ๋กœ ํ• ๋‹นํ•  ์ˆ˜ ์—†๋‹ค.
    
      console.log(y);
    }
    
    console.log(y);
    
    >>> 0
    >>> 1
    >>> 1 //๊ฐ’์ด ๋ณ€๊ฒฝ๋จ.

     

    ์Šค์ฝ”ํ”„ ์ฒด์ธ

    ๋ธ”๋ก์œผ๋กœ ์ธํ•œ ์Šค์ฝ”ํ”„๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ด€์ ์—์„œ ๋ณด์•˜์„ ๋•Œ

    ์ง€์—ญ ๋ณ€์ˆ˜๋“ค์€ ์Šคํƒ ์˜์—ญ์— ์œ„์น˜ํ•œ๋‹ค.

    ๊ทธ์— ๋”ฐ๋ฅธ ์˜ˆ์‹œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด

    let a = 0;
    let b = 1;
    let c = 2;
    console.log('1 : ', a, b, c);
    
    {
      let a = 9;
      let b = 8;
      console.log('2 : ', a, b, c);
      {
        let a = 10;
        console.log('3 : ', a, b, c);
      }
      console.log('4 : ', a, b, c);
    }
    console.log('5 : ', a, b, c);
    
    >>> 1 :  0 1 2
    >>> 2 :  9 8 2
    >>> 3 :  10 8 2
    >>> 4 :  9 8 2
    >>> 5 :  0 1 2

    ์œ„์˜ ๊ฒฐ๊ณผ๋ฅผ ํ†ตํ•ด ์•Œ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ํ˜„์žฌ ๋ธ”๋ก์—์„œ ํ˜ธ์ถœํ•œ ๋ณ€์ˆ˜๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ

    ํ˜„์žฌ์˜ ์ƒ์œ„ ๋ฒ”์œ„๋ฅผ ์กฐ์‚ฌํ•˜์—ฌ ๊ฐ’์„ ํ™•์ธํ•œ๋‹ค. (์กด์žฌX = ํ•˜๋‚˜์”ฉ ๊ฑฐ์Šฌ๋Ÿฌ ์˜ฌ๋ผ๊ฐ€๋ฉฐ ์กฐ์‚ฌ)

    ์ด๋Š” ์Šคํƒ์œผ๋กœ ์ธํ•œ ๊ฒฐ๊ณผ๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

     


    Global ๋ณ€์ˆ˜/์ƒ์ˆ˜

    ๋ฐ์ดํ„ฐ ์˜์—ญ์— ์œ„์น˜

    ์ฝ”๋“œ ์–ด๋Š ๊ณณ์—์„œ๋“  ์ ‘๊ทผ ๊ฐ€๋Šฅ

    ํ”„๋กœ๊ทธ๋žจ ์ข…๋ฃŒ ์‹œ ์†Œ๋ฉธ

     

    Local ๋ณ€์ˆ˜/์ƒ์ˆ˜

    ์Šคํƒ ์˜์—ญ์— ์œ„์น˜

    ์„ ์–ธ๋œ ๋ธ”๋ก ๋‚ด์—์„œ๋งŒ ์กด์žฌ

    ๋ธ”๋ก ์ข…๋ฃŒ ์‹œ ์†Œ๋ฉธ

     

     

    ๋Œ“๊ธ€