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

JS_๋ฌธ๋ฒ• (๊ฐœ์ธ)_ ๋ณ€์ˆ˜ ์ด์ •๋ฆฌ

by KASSID 2023. 8. 4.

๋ชฉ์ฐจ

    728x90

    JS์—์„œ ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ค ๋•Œ 3๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์กด์žฌํ•œ๋‹ค.

    ์ด๋“ค์€ ์„ ์–ธ, ํ• ๋‹น, ๋ฒ”์œ„์˜ ์ธก๋ฉด์—์„œ ์„œ๋กœ ๋‹ค๋ฅธ ํŠน์ง•์„ ๊ฐ€์ง„๋‹ค!

    var 
    let
    const

     

      ์„ ์–ธ ํ• ๋‹น ๋ฒ”์œ„
    var ์žฌ์„ ์–ธ O ์žฌํ• ๋‹น O   ํ•จ์ˆ˜ scope
    let ์žฌ์„ ์–ธ X ์žฌํ• ๋‹น O ๋ธ”๋ก scope
    const ์žฌ์„ ์–ธ X ์žฌํ• ๋‹น X
    (๊ฐ์ฒด ๋‚ด๋ถ€๋Š” ์ƒ๊ด€์—†์Œ )
    ๋ธ”๋ก scope

     

    - ๋งŒ์•ฝ ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ๋‹ค๋ฉด?

    ๊ฐ์ฒด๋Š” ์–ด๋– ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ์„ ์–ธํ•˜์—ฌ๋„ ๋‚ด๋ถ€ ์š”์†Œ์— ๋Œ€ํ•œ ์ˆ˜์ •์€ ๊ฐ€๋Šฅํ•˜๋‹ค.

    ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ์—๋Š” ์•„๋ž˜์˜ ๋ฐฉ๋ฒ•์„ ์ด์šฉํ•œ๋‹ค.

     

    Object.freeze( ์ˆ˜์ •๋ถˆ๊ฐ€ํ•˜๊ฒŒ ํ•˜๊ณ ์‹ถ์€ ๊ฐ์ฒด๋ช… );

     

    ์˜ˆ์‹œ

    const a = { name : "Kassid"};
    
    Object.freeze(a);
    
    a.name = "Hello";
    
    console.log(a);

     

     

     


    ๋ณ€์ˆ˜์™€ ํ˜ธ์ด์ŠคํŒ…

    (์ž์„ธํžˆ ๋‹ค๋ค˜๋˜ ๊ธ€โ–ผ)

    2023.03.31 - [๐ŸŒŒ | WEB DEV/Vanilla JS] - JS_๊ธฐ์ˆ  (3)_ Hoisting(ํ˜ธ์ด์ŠคํŒ…) ๋ฟŒ์ˆ˜๊ธฐ

     

    JS์—”์ง„์€ ๋ณ€์ˆ˜๋ฅผ ๋ณด๋ฉด ํ˜ธ์ด์ŠคํŒ…์„ ํ•œ๋‹ค.

    ์ฆ‰, ๋ณ€์ˆ˜ ์„ ์–ธ๋ถ€๋ฅผ ํ•ด๋‹น ๋ฒ”์œ„์˜ ์ƒ๋‹จ์œผ๋กœ ๋Œ๊ณ ์˜จ๋‹ค.

     

     


    ๋ณ€์ˆ˜ ํ•œ ๋ฒˆ์— ์—ฌ๋Ÿฌ๊ฐœ

    let name = "Kassid", age = 25, job = "student";

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

     

     


    window๋กœ ์ „์—ญ๋ณ€์ˆ˜ ๋งŒ๋“ค๊ธฐ

    var ํ‚ค์›Œ๋“œ๋Š” ์ „์—ญ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ค๋ฉด window์— ๋ณด๊ด€์ด ๋œ๋‹ค.

    var val = "Hello";
    
    console.log(window.val);
    
    --------
    Hello

     

    ์ด๋Ÿฌํ•œ ์ „์—ญ๋ณ€์ˆ˜๋ฅผ var ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•œ๋‹ค.

    window.val2 = "HALO";
    console.log(window.val2);

     

    (Node.js ์—์„œ๋Š” global ํ‚ค์›Œ๋“œ๋กœ ๋Œ€์ฒด ๊ฐ€๋Šฅ!)

     

     


    ๋ฐ˜๋ณต๋ฌธ์—์„œ์˜ ๋ฒ„๊ทธ (w. var / let)

    for (var i = 1; i < 6; i++) { 
      setTimeout(function() { console.log(i); }, i*1000 ); 
    }

    ์œ„์˜ ๋ฐ˜๋ณต๋ฌธ์€ var๋กœ ์ •์˜๋œ i๋ฅผ ์ด์šฉํ•˜์—ฌ 1์ดˆ ๊ฐ„๊ฒฉ์œผ๋กœ 1~5๊ฐ€ ์ถœ๋ ฅ๋˜๋„๋ก ์ž‘์„ฑํ•œ ์ฝ”๋“œ์ด๋‹ค.

     

    ํ•˜์ง€๋งŒ ๊ฒฐ๊ณผ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

    5
    5
    5
    5
    5

     

    ์ด๋ ‡๊ฒŒ ๊ธฐ๋Œ€ํ•œ ๊ฒƒ๊ณผ ๋‹ค๋ฅด๊ฒŒ 5๋งŒ ์ถœ๋ ฅ์ด ๋œ๋‹ค. ๊ทธ ์ด์œ ๋Š” ๋ฌด์—‡์ผ๊นŒ?

     

    ๋ฐ˜๋ณต๋ฌธ์„ ์‚ดํŽด๋ณด๋ฉด setTimeout์ด 5ํšŒ ํ˜ธ์ถœ๋œ๋‹ค.

    ์ด๋•Œ ๋ฐ˜๋ณต๋ฌธ์ด ์ข…๋ฃŒ๋ ๋•Œ๊นŒ์ง€ setTimeout ๋‚ด๋ถ€๋Š” ๋™์‹œ์— ์‹คํ–‰์ด ๋˜์ง€ ์•Š๊ณ ,

    setTimeout์— ์„ค์ •๋œ ์ดˆ์— ๋งž์ถ”์–ด ์‹คํ–‰์ด ๋œ๋‹ค.

     

    ๋‚ด๋ถ€ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰์ด ๋  ๋•Œ i๋ฅผ ์ฐธ์กฐํ•˜๋Š”๋ฐ

    var ํ‚ค์›Œ๋“œ๋กœ ์„ ์–ธ์ด ๋˜์–ด์žˆ๊ณ  ์ด ํ‚ค์›Œ๋“œ์˜ ์ ์šฉ scope๋Š” ํ•จ์ˆ˜ ๋ฒ”์œ„์ด๋‹ค.

     

    ์ฆ‰, setTimeout ๋‚ด๋ถ€ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰์ด ๋ ๋•Œ

    ์ฐธ์กฐํ•˜๋Š” i์˜ ๊ฐ’์€ ๊ฐ ๋ธ”๋ก๋งˆ๋‹ค ๋‹ค๋ฅธ ๊ฒƒ์ด ์•„๋‹Œ ๋ชจ๋“  ๋ธ”๋ก์ด ๊ฐ™์€ i๋ฅผ ์ฐธ์กฐํ•˜๊ธฐ ๋•Œ๋ฌธ์—

    ๋ชจ๋‘ 5๋ผ๋Š” ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

     

     

    ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ?

     

    for (let i = 1; i < 6; i++) { 
      setTimeout(function() { console.log(i); }, i*1000 ); 
    }
    
    --------
    1
    2
    3
    4
    5

     

    ๊ฐ„๋‹จํžˆ let ํ‚ค์›Œ๋“œ๋กœ ๋ณ€๊ฒฝํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

     

    let์€ ๋ธ”๋ก ๋‹จ์œ„์ด๊ธฐ๋•Œ๋ฌธ์— ๊ฐ ๋ธ”๋ก๋งˆ๋‹ค. let i =1, let i =2, ... ๋ผ๊ณ  ์„ ์–ธํ•œ ํšจ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

    ๋Œ“๊ธ€