Home 13์žฅ, ์Šค์ฝ”ํ”„
Post
์ทจ์†Œ

13์žฅ, ์Šค์ฝ”ํ”„

๐Ÿ”– 13์žฅ, ์Šค์ฝ”ํ”„

1
๐Ÿ“Œ ๋ฐฐ์šด ๋‚ด์šฉ ๋ฐ ๊ธฐ์–ตํ•˜๊ณ  ์‹ถ์€ ๋‚ด์šฉ

์Šค์ฝ”ํ”„

  • ์Šค์ฝ”ํ”„(scope): ์‹๋ณ„์ž๊ฐ€ ์œ ํšจํ•œ ๋ฒ”์œ„

  • ์‹๋ณ„์ž ๊ฒฐ์ •(identifier resolution): ์ด๋ฆ„์ด ๊ฐ™์€ ๋‘ ๊ฐœ์˜ ๋ณ€์ˆ˜ ์ค‘์—์„œ ์–ด๋–ค ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•ด์•ผ ํ• ๊ฒƒ์ธ๊ฐ€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ

  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    var x = 'global';
      
    function foo() {
      var x = 'local';
      console.log(x); // local
    }
      
    foo();
      
    console.log(x); // global
    
    ์ฝ”๋“œ์˜ ๋ฌธ๋งฅ๊ณผ ํ™˜๊ฒฝ

    ๋ ‰์‹œ์ปฌ ํ™˜๊ฒฝ: ์ฝ”๋“œ๊ฐ€ ์–ด๋””์„œ ์‹คํ–‰๋˜๋ฉฐ ์ฃผ๋ณ€์— ์–ด๋–ค ์ฝ”๋“œ๊ฐ€ ์žˆ๋Š”์ง€

    ์ปจํ…์ŠคํŠธ: ๋ ‰์‹œ์ปฌ ํ™˜๊ฒฝ์—์„œ ์ด๋ฃจ์–ด์ง

    ๋ชจ๋“  ์ฝ”๋“œ๋Š” ์‹คํ–‰ ์ปจํ…์ŠคํŠธ์—์„œ ํ‰๊ฐ€๋˜๊ณ  ์‹คํ–‰๋˜๋ฉฐ ์Šค์ฝ”ํ”„๋Š” ์‹คํ–‰ ์ปจํ…์ŠคํŠธ์™€ ๊นŠ์€ ๊ด€๋ จ์ด ์žˆ์Œ

    • ๋งŒ์•ฝ ์Šค์ฝ”ํ”„ ๊ฐœ๋…์ด ์—†๋‹ค๋ฉด ๊ฐ™์€ ์ด๋ฆ„์„ ๊ฐ–๋Š” ๋ณ€์ˆ˜๋Š” ์ถฉ๋Œ์„ ์ผ์œผํ‚ด == ํ•˜๋‚˜๋งŒ ์‚ฌ์šฉ๊ฐ€๋Šฅ

์Šค์ฝ”ํ”„์˜ ์ข…๋ฅ˜

  • ์ „์—ญ: ์ฝ”๋“œ ๊ฐ€์žฅ ๋ฐ”๊นฅ ์˜์—ญ
    • ์ „์—ญ ๋ณ€์ˆ˜๋Š” ์–ด๋””์„œ๋“  ์ฐธ์กฐ๊ฐ€๋Šฅ
  • ์ง€์—ญ: ํ•จ์ˆ˜ ๋ชธ์ฒด ๋‚ด๋ถ€

์ง€์—ญ๊ณผ ์ง€์—ญ์Šค์ฝ”ํ”„

  • ์ง€์—ญ ๋ณ€์ˆ˜๋Š” ์ž์‹ ์˜ ์ง€์—ญ์Šค์ฝ”ํ”„์™€ ํ•˜์œ„ ์ง€์—ญ ์Šค์ฝ”ํ”„์—์„œ๋งŒ ์œ ํšจ

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

  • ์Šค์ฝ”ํ”„๊ฐ€ ํ•จ์ˆ˜์˜ ์ค‘์ฒฉ์— ์˜ํ•ด ๊ณ„์ธต๊ตฌ์กฐ๋ฅผ ๊ฐ–์Œ
  • ์Šค์ฝ”ํ”„ ์ฒด์ธ(scope chain): ์Šค์ฝ”ํ”„๊ฐ€ ๊ณ„์ธต์ ์œผ๋กœ ์—ฐ๊ฒฐ๋œ ๊ฒƒ
    • ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•  ๋•Œ ์Šค์ฝ”ํ”„ ์ฒด์ธ์„ ํ†ตํ•ด ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•˜๋Š” ์ฝ”๋“œ์˜ ์Šค์ฝ”ํ”„์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ์ƒ์œ„ ์Šค์ฝ”ํ”„ ๋ฐฉํ–ฅ์œผ๋กœ ์ด๋™ํ•˜์—ฌ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋ฅผ ๊ฒ€์ƒ‰ํ•จ
    • ๋ฌผ๋ฆฌ์ ์ธ ์‹ค์ฒด๋กœ ์กด์žฌ
    • ๋ ‰์‹œ์ปฌ ํ™˜๊ฒฝ์„ ๋‹จ๋ฐฉํ–ฅ์œผ๋กœ ์—ฐ๊ฒฐํ•œ ๊ฒƒ. ์ „์—ญ ๋ ‰์‹œ์ปฌ ํ™˜๊ฒฝ์€ ์ฝ”๋“œ๊ฐ€ ๋กœ๋“œ๋˜๋ฉด ๊ณง๋ฐ”๋กœ ์ƒ์„ฑ๋˜๊ณ  ํ•จ์ˆ˜์˜ ๋ ‰์‹œ์ปฌ ํ™˜๊ฒฝ์€ ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด ๊ณง๋ฐ”๋กœ ์ƒ์„ฑ๋จ

์Šค์ฝ”ํ”„ ์ฒด์ธ์— ์˜ํ•œ ๋ณ€์ˆ˜ ๊ฒ€์ƒ‰

  • ์ƒ์œ„ ์Šค์ฝ”ํ”„์—์„œ ์œ ํšจํ•œ ๋ณ€์ˆ˜๋Š” ํ•˜์œ„ ์Šค์ฝ”ํ”„์—์„œ ์ž์œ ๋กญ๊ฒŒ ์ฐธ์กฐ ๊ฐ€๋Šฅ
  • ํ•˜์œ„ ์Šค์ฝ”ํ”„์—์„œ ์œ ํšจํ•œ ๋ณ€์ˆ˜๋ฅผ ์ƒ์œ„ ์Šค์ฝ”ํ”„์—์„œ ์ฐธ์กฐํ•  ์ˆ˜ ์—†์Œ
  • ์Šค์ฝ”ํ”„์˜ ๊ณ„์ธต์  ๊ตฌ์กฐ๋Š” ์ƒ์†๊ณผ ์œ ์‚ฌํ•จ

ํ•จ์ˆ˜ ๋ ˆ๋ฒจ ์Šค์ฝ”ํ”„

  • ์ฝ”๋“œ ๋ธ”๋ก์ด ์•„๋‹Œ ํ•จ์ˆ˜์— ์˜ํ•ด์„œ๋งŒ ์ง€์—ญ์Šค์ฝ”ํ”„๊ฐ€ ์ƒ์„ฑ

  • ๋ธ”๋ก ๋ ˆ๋ฒจ ์Šค์ฝ”ํ”„(block level scope): ๋Œ€๋ถ€๋ถ„์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋Š” ํ•จ์ˆ˜ ๋ชธ์ฒด๋งŒ์ด ์•„๋‹ˆ๋ผ ๋ชจ๋“  ์ฝ”๋“œ ๋ธ”๋ก์ด ์ง€์—ญ์Šค์ฝ”ํ”„๋ฅผ ๋งŒ๋“ฆ

    • varํ‚ค์›Œ๋“œ๋กœ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋Š” ์˜ค๋กœ์ง€ ํ•จ์ˆ˜์˜ ์ฝ”๋“œ ๋ธ”๋ก๋งŒ์„ ์ง€์—ญ์Šค์ฝ”ํ”„๋กœ ์ธ์ •

    • 1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      
      var x = 1;
          
      if (true) {
        // var ํ‚ค์›Œ๋“œ๋กœ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋Š” ํ•จ์ˆ˜์˜ ์ฝ”๋“œ ๋ธ”๋ก(ํ•จ์ˆ˜ ๋ชธ์ฒด)๋งŒ์„ ์ง€์—ญ ์Šค์ฝ”ํ”„๋กœ ์ธ์ •ํ•œ๋‹ค.
        // ํ•จ์ˆ˜ ๋ฐ–์—์„œ var ํ‚ค์›Œ๋“œ๋กœ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋Š” ์ฝ”๋“œ ๋ธ”๋ก ๋‚ด์—์„œ ์„ ์–ธ๋˜์—ˆ๋‹ค ํ• ์ง€๋ผ๋„ ๋ชจ๋‘ ์ „์—ญ ๋ณ€์ˆ˜๋‹ค.
        // ๋”ฐ๋ผ์„œ x๋Š” ์ „์—ญ ๋ณ€์ˆ˜๋‹ค. ์ด๋ฏธ ์„ ์–ธ๋œ ์ „์—ญ ๋ณ€์ˆ˜ x๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ x ๋ณ€์ˆ˜๋Š” ์ค‘๋ณต ์„ ์–ธ๋œ๋‹ค.
        // ์ด๋Š” ์˜๋„์น˜ ์•Š๊ฒŒ ๋ณ€์ˆ˜ ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜๋Š” ๋ถ€์ž‘์šฉ์„ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.
        var x = 10;
      }
          
      console.log(x); // 10
      
    • 1
      2
      3
      4
      5
      6
      7
      8
      9
      
      var i = 10;
          
      // for ๋ฌธ์—์„œ ์„ ์–ธํ•œ i๋Š” ์ „์—ญ ๋ณ€์ˆ˜๋‹ค. ์ด๋ฏธ ์„ ์–ธ๋œ ์ „์—ญ ๋ณ€์ˆ˜ i๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ์ค‘๋ณต ์„ ์–ธ๋œ๋‹ค.
      for (var i = 0; i < 5; i++) {
        console.log(i); // 0 1 2 3 4
      }
          
      // ์˜๋„์น˜ ์•Š๊ฒŒ ๋ณ€์ˆ˜์˜ ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜์—ˆ๋‹ค.
      console.log(i); // 5
      

๋ ‰์‹œ์ปฌ ์Šค์ฝ”ํ”„

1
2
3
4
5
6
7
8
9
10
11
12
13
var x = 1;

function foo() {
  var x = 10;
  bar();
}

function bar() {
  console.log(x);
}

foo(); // ?
bar(); // ?
  • bar ํ•จ์ˆ˜์˜ ์ƒ์œ„ ์Šค์ฝ”ํ”„ ๊ฒฐ์ • ๋‘๊ฐ€์ง€ ํŒจํ„ด

    1. ํ•จ์ˆ˜๋ฅผ ์–ด๋””์„œ ํ˜ธ์ถœํ–ˆ๋Š”์ง€์— ๋”ฐ๋ผ ํ•จ์ˆ˜์˜ ์ƒ์œ„ ์Šค์ฝ”ํ”„ ๊ฒฐ์ •
      • ๋™์  ์Šค์ฝ”ํ”„: ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๋Š” ์‹œ์ ์— ๋™์ ์œผ๋กœ ์ƒ์œ„์Šค์ฝ”ํ”„ ๊ฒฐ์ •
    2. ํ•จ์ˆ˜๋ฅผ ์–ด๋””์„œ ์ •์˜ํ–ˆ๋Š”์ง€์— ๋”ฐ๋ผ ํ•จ์ˆ˜์˜ ์ƒ์œ„ ์Šค์ฝ”ํ”„ ๊ฒฐ์ •

      • ๋ ‰์‹œ์ปฌ ๋˜๋Š” ์ •์  ์Šค์ฝ”ํ”„

      • ์ •์  ์Šค์ฝ”ํ”„: ํ•จ์ˆ˜ ์ •์˜๊ฐ€ ํ‰๊ฐ€๋˜๋Š” ์‹œ์ ์— ์ƒ์œ„ ์Šค์ฝ”ํ”„๊ฐ€ ์ •์ ์œผ๋กœ ๊ฒฐ์ •
      • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋น„๋กฏํ•œ ๋Œ€๋ถ€๋ถ„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋Š” ๋ ‰์‹œ์ปฌ ์Šค์ฝ”ํ”„๋ฅผ ๋”ฐ๋ฆ„
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋ ‰์‹œ์ปฌ ์Šค์ฝ”ํ”„๋ฅผ ๋”ฐ๋ฅด๋ฏ€๋กœ ํ•จ์ˆ˜๊ฐ€ ์–ด๋””์„œ ์ •์˜ํ–ˆ๋Š”์ง€์— ๋”ฐ๋ผ ์ƒ์œ„ ์Šค์ฝ”ํ”„ ๊ฒฐ์ •

    • ํ•จ์ˆ˜์˜ ์ƒ์œ„ ์Šค์ฝ”ํ”„๋Š” ์–ธ์ œ๋‚˜ ์ž์‹ ์ด ์ •์˜๋œ ์Šค์ฝ”ํ”„
  • ํ•จ์ˆ˜์˜ ์ƒ์œ„ ์Šค์ฝ”ํ”„๋Š” ํ•จ์ˆ˜ ์ •์˜๊ฐ€ ์‹คํ–‰๋  ๋•Œ ์ •์ ์œผ๋กœ ๊ฒฐ์ •

    • ๋”ฐ๋ผ์„œ ์œ„์— foo()์™€ bar()๋Š” 1์„ ์ถœ๋ ฅ
1
โ—๏ธ ์ฝ์€ ์†Œ๊ฐ

์Šค์ฝ”ํ”„๋Š” ์‹๋ณ„์ž๊ฐ€ ์œ ํšจํ•œ ๋ฒ”์œ„๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ๋˜ํ•œ ๋ ‰์‹œ์ปฌํ™˜๊ฒฝ์€ ์ฝ”๋“œ๊ฐ€ ์–ด๋””์„œ ์‹คํ–‰๋˜๋ฉฐ ์ฃผ๋ณ€์— ์–ด๋–ค ์ฝ”๋“œ๊ฐ€ ์žˆ๋Š”์ง€๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ var ํ‚ค์›Œ๋“œ๋Š” ํ•จ์ˆ˜ ๋ ˆ๋ฒจ ์Šค์ฝ”ํ”„์ด๊ธฐ ๋•Œ๋ฌธ์— ํ•จ์ˆ˜ ์ฝ”๋“œ ๋ธ”๋ก์—์„œ๋งŒ ์ง€์—ญ์Šค์ฝ”ํ”„๋กœ ์กด์žฌํ•œ๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋ ‰์‹œ์ปฌ ์Šค์ฝ”ํ”„๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ํ•จ์ˆ˜๋ฅผ ์–ด๋””์„œ ์ •์˜๋ฅผ ํ–ˆ๋Š”์ง€์— ๋”ฐ๋ผ ์ •์ ์œผ๋กœ ์ƒ์œ„ ์Šค์ฝ”ํ”„๊ฐ€ ๊ฒฐ์ •๋˜๋Š” ๊ฒƒ์„ ์•Œ์•˜๋‹ค.

1
โ“ ๊ถ๊ธˆํ•œ ๋‚ด์šฉ์ด๋‚˜ ์ž˜ ์ดํ•ด๋˜์ง€ ์•Š๋Š” ๋‚ด์šฉ
  • ์—†์Œ
This post is licensed under CC BY 4.0 by the author.

12์žฅ, ํ•จ์ˆ˜

๋ฐฐ์—ด ๋‘๋ฐฐ ๋งŒ๋“ค๊ธฐ