JavaScript: const, let

    JavaScript: const, let

    2018, Mar 20    

    ์ฐธ๊ณ ํ•œ ๊ธ€

    ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ

    • ํŒŒ์ด์–ดํญ์Šค 47.0

    const

    const๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ 1.5 ์ดํ›„ ๋ฒ„์ „์—์„œ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ ํ‚ค์›Œ๋“œ๋กœ, ์ƒ์ˆ˜๋ฅผ ์ •์˜ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋ฉฐ var ํ‚ค์›Œ๋“œ๋ฅผ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋‹ค.

    const name1 = value1 [, name2 = value2 [, ... [, nameN = valueN]]];
    
    const PI = 3.14;
    

    const๋Š” ์ „ํ˜•์ ์ธ โ€˜์ƒ์ˆ˜โ€™๋‹ต๊ฒŒ ์„ ์–ธ ์‹œ์ ์— ๋ฐ˜๋“œ์‹œ ์ดˆ๊ธฐํ™”๋˜์–ด์•ผ ํ•˜๋ฉฐ ์„ ์–ธ ์ดํ›„์˜ ํ• ๋‹น์€ ๋ฌด์‹œ๋˜๊ฑฐ๋‚˜ ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.

    const ABC; // SyntaxError: missing = in const declaration, ์ดˆ๊ธฐํ™” ํ•„์š”ํ•จ
    
    const PI = 3.14; // ์ •์ƒ์ ์ธ ์„ ์–ธ
    const PI = 3.14159265; // SyntaxError: redeclaration of const PI, ์ค‘๋ณต ์„ ์–ธ ๋ถˆ๊ฐ€
    PI = 3.141592; // TypeError: invalid assignment to const `PI', ์žฌํ• ๋‹น ๋ถˆ๊ฐ€
    var PI = 3; // SyntaxError: redeclaration of const PI, ๊ฐ™์€ ์ด๋ฆ„์˜ ๋ณ€์ˆ˜ ์„ ์–ธ ๋ถˆ๊ฐ€
    

    const๋Š” ๊ฐ์ฒด ์„ ์–ธ์—๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋‚˜ ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ๋Š” ๋ณดํ˜ธ๋˜์ง€ ์•Š๋Š”๋‹ค:

    const MY_OBJECT = {"key": "value"};
    MY_OBJECT = {"OTHER_KEY": "value"}; // SyntaxError: redeclaration of const MY_OBJECT
    MY_OBJECT.key = "otherValue";
    console.debug(MY_OBJECT); // Object { key: "otherValue" }
    

    ๊ฐ์ฒด๋ฅผ ์™„์ „ํžˆ ๋ณดํ˜ธํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด Object.freeze()๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ.

    let

    let์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ 1.7(ES2015)๋ถ€ํ„ฐ ์‹ ๊ทœ ์ถ”๊ฐ€๋œ ํ‚ค์›Œ๋“œ๋‹ค. const์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ var๋ฅผ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋‹ค.

    let var1 [= value1] [, var2 [= value2]] [, ..., varN [= valueN]];
    

    let์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋ณ€์ˆ˜๊ฐ€ ๊ฐ–๋Š” ํ•จ์ˆ˜ ์œ ํšจ๋ฒ”์œ„๋ฅผ ๋ธ”๋ก ์œ ํšจ๋ฒ”์œ„๋กœ ์ œํ•œํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค. ๊ฐ€๋ น ๋‹ค์Œ์˜ ๊ฒฝ์šฐ:

    function fn() {
      let a = 1;
      {
        let b = 2;
        var w = 102;
      }
      console.debug(a); // 1
      console.debug(w); // 102
      console.debug(b); // ReferenceError: b is not defined
    }
    fn();
    

    ์œ ํšจ๋ฒ”์œ„๊ฐ€ ํ•จ์ˆ˜ ๋‹จ์œ„์ธ var๋ฅผ ์‚ฌ์šฉํ•œ ๋ณ€์ˆ˜ w๋Š” ๋ธ”๋ก ๋ฐ–์—์„œ๋„ ์ฐธ์กฐ ๊ฐ€๋Šฅํ•œ ๋ฐ˜๋ฉด, let์„ ์‚ฌ์šฉํ•˜์—ฌ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋Š” ํ•ด๋‹น ์ง€์—ญ์„ ๊ฐ์‹ผ ๋ธ”๋ก๊ณผ ๊ทธ ํ•˜์œ„์˜ ์ค‘์ฒฉ ๋ธ”๋ก์—์„œ๋งŒ ์œ ํšจํ•œ ๋ธ”๋ก ๋‹จ์œ„์˜ ์œ ํšจ๋ฒ”์œ„๋ฅผ ๊ฐ–๊ธฐ ๋•Œ๋ฌธ์— ๋ธ”๋ก์„ ๋ฒ—์–ด๋‚œ ์ง€์—ญ์—์„œ๋Š” ์ฐธ์กฐ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

    ์ด๋ฅผ ํ™œ์šฉํ•˜๋ฉด ์ œ์–ด๋ฌธ์˜ ํ‘œํ˜„์‹ ๋‚ด์—์„œ ์ƒ์„ฑ๋œ ๋ณ€์ˆ˜์˜ ์œ ํšจ๋ฒ”์œ„๋ฅผ ํ•ด๋‹น ์ œ์–ด๋ฌธ ๋‚ด๋กœ ์ œํ•œํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด:

    var arr = ['a', 'b', 'c'];
    
    for (var ele1 in arr) {}
    console.debug(arr[ele1]); // 'c'
    
    for (let ele2 in arr) {}
    console.debug(arr[ele2]); // ReferenceError: ele2 is not defined
    

    let์œผ๋กœ ์„ ์–ธ๋œ ele2๋Š” for๋ฌธ ๋ฐ–์—์„œ ์ฐธ์กฐํ•  ์ˆ˜ ์—†๋‹ค.

    IE๋Š” 11๊ณผ edge์—์„œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ https://msdn.microsoft.com/en-us/library/s4esdbwz(v=vs.94).aspx