ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JavaScript] var, let, const ν‚€μ›Œλ“œμ˜ 차이
    TECH 2022. 3. 4. 21:20

    var

    1. 쀑볡 μ„ μ–Έ κ°€λŠ₯

    var x = 10;
    var y = 20;
    
    var x = 100;
    var y; // μ΄ˆκΈ°ν™”λ¬Έ μ—†μœΌλ©΄ λ¬΄μ‹œ
    
    console.log(x);  // 100
    console.log(y);  // 20

    2. ν•¨μˆ˜ 레벨 μŠ€μ½”ν”„

    ν•¨μˆ˜μ˜ μ½”λ“œ 블둝을 지역 μŠ€μ½”ν”„λ‘œ μΈμ •ν•˜λ―€λ‘œ ν•¨μˆ˜ μ™ΈλΆ€μ—μ„œ var ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ λ³€μˆ˜λŠ” μ½”λ“œ 블둝 λ‚΄μ—μ„œ 선언해도 μ „μ—­ λ³€μˆ˜λ‘œ 인정됨.

    var a = 10;
    
    function callA() {
        console.log(a);
    }
    
    callA() // 10

    3. λ³€μˆ˜ ν˜Έμ΄μŠ€νŒ…

    var ν‚€μ›Œλ“œλ‘œ λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜λ©΄ ν˜Έμ΄μŠ€νŒ…μ— μ˜ν•΄ μŠ€μ½”ν”„μ˜ 상단에 μœ„μΉ˜ν•œ κ²ƒμ²˜λŸΌ λŒμ–΄ μ˜¬λ €μ Έμ„œ λ™μž‘ν•¨.

    console.log(foo); // undefined
    foo = 123;
    console.log(foo); // 123
    var foo;

     

     

     

     

    let

    var ν‚€μ›Œλ“œμ˜ 단점을 λ³΄μ™„ν•˜κΈ° μœ„ν•΄ ES6μ—μ„œ λ„μž…ν•œ μƒˆλ‘œμš΄ ν‚€μ›Œλ“œ.

    1. 쀑볡 μ„ μ–Έ κΈˆμ§€

    var x = 10;
    var x = 100;
    
    console.log(x);  // 100
    
    let y = 20;
    let y = 200; // SyntaxError: Identifier 'y' has already been declared

    2. 블둝 레벨 μŠ€μ½”ν”„

    let ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ λ³€μˆ˜λŠ” λͺ¨λ“  μ½”λ“œ 블둝을 지역 μŠ€μ½”ν”„λ‘œ μΈμ •ν•˜λŠ” 블둝 레벨 μŠ€μ½”ν”„λ₯Ό 따름

    let a = 1;
    
    {
        let a = 10;
        let b = 20;
    }
    
    console.log(a); // 1
    console.log(b); // ReferenceError: b is not defined

    aλŠ” μ „μ—­ λ³€μˆ˜, 블둝 μ•ˆμ— μžˆλŠ” aλŠ” 지역 λ³€μˆ˜, bλŠ” 지역 λ³€μˆ˜

    3. ν•¨μˆ˜ ν˜Έμ΄μŠ€νŒ…

    let ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ λ³€μˆ˜λŠ” λ³€μˆ˜ ν˜Έμ΄μŠ€νŒ…μ΄ λ°œμƒν•˜μ§€ μ•ŠλŠ” κ²ƒμ²˜λŸΌ λ™μž‘ν•¨

    console.log(foo); // ReferenceError: foo is not defined
    let foo = 123;

    κ·Έλ ‡μ§€λ§Œ ν˜Έμ΄μŠ€νŒ…μ΄ λ°œμƒν•˜μ§€ μ•ŠλŠ” 것은 μ•„λ‹ˆλ‹€.

    let foo = 123;
    
    {
        console.log(foo); // ReferenceError: Cannot access 'foo' before initializtion
        let foo = 3;
    }

    ν˜Έμ΄μŠ€νŒ…μ΄ λ°œμƒν•˜κΈ° λ•Œλ¬Έμ— ReferenceErrorκ°€ λ°œμƒν•œλ‹€.

    μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” let, constλ₯Ό ν¬ν•¨ν•œ λͺ¨λ“  μ„ μ–Έ(var, let, const, function, function*, class)μ—μ„œ λͺ¨λ‘ ν˜Έμ΄μŠ€νŒ…μ΄ λ°œμƒν•˜μ§€λ§Œ ES6μ—μ„œ λ„μž…λœ let, const, classμ—μ„œλŠ” ν˜Έμ΄μŠ€νŒ…μ΄ λ°œμƒν•˜μ§€ μ•ŠλŠ” κ²ƒμ²˜λŸΌ λ™μž‘ν•œλ‹€.

     

     

     

    const

    1. μ„ μ–Έκ³Ό μ΄ˆκΈ°ν™”

    const둜 μ„ μ–Έλœ λ³€μˆ˜λŠ” μ„ μ–Έκ³Ό λ™μ‹œμ— μ΄ˆκΈ°ν™”ν•΄μ•Ό ν•œλ‹€.

    const foo = 1; (o)
    const foo;     (x)

    letκ³Ό λ§ˆμ°¬κ°€μ§€λ‘œ 블둝 레벨 μŠ€μ½”ν”„λ₯Ό 가지고, ν˜Έμ΄μŠ€νŒ…μ΄ λ°œμƒν•˜μ§€ μ•ŠλŠ” κ²ƒμ²˜λŸΌ λ™μž‘ν•œλ‹€.

    2. μž¬ν• λ‹Ή κΈˆμ§€

    const둜 μ„ μ–Έν•œ λ³€μˆ˜λŠ” μž¬ν• λ‹Ήμ΄ κΈˆμ§€λœλ‹€.

    const foo = 1;
    foo = 2; // TypeError: Assignment to constant variable.

    3. μƒμˆ˜

    const ν‚€μ›Œλ“œμ™€ λŒ€λ¬Έμž 이름을 μ‚¬μš©ν•΄ μƒμˆ˜μž„μ„ λ‚˜νƒ€λ‚Έλ‹€.

    const DISCOUNT_RATE = 0.1;
    
    let price = 10000;
    let discountPrice = price - (price * DISCOUNT_RATE)
    
    console.log(discountPrice)

    4. 객체

    const ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ 객체의 경우 값을 λ³€κ²½ν•  수 μžˆλ‹€.

    const myself = {
        name: 'ttaerrim'
    }
    
    myself.name = 'leetaerim';
    console.log(myself) // {name: 'leetaerim'}

     

     

     

    var vs let vs const

    λ³€μˆ˜λŠ” 기본적으둜 constλ₯Ό μ‚¬μš©ν•˜κ³  μž¬ν• λ‹Ήμ΄ ν•„μš”ν•œ κ²½μš°μ— ν•œν•΄ let을 μ‚¬μš©ν•˜λŠ” 것이 μ’‹λ‹€. κΈ°λ³Έμ μœΌλ‘œλŠ” const ν‚€μ›Œλ“œλ‘œ λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜λŠ” 것이 μ•ˆμ „ν•˜λ‹€.

    • ES6μ—μ„œλŠ” var ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€.
    • μž¬ν• λ‹Ήμ΄ ν•„μš”ν•œ κ²½μš°μ— ν•œν•΄ let ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜κ³  μ΄λ•Œ λ³€μˆ˜μ˜ μŠ€μ½”ν”„λŠ” μ΅œλŒ€ν•œ 쒁게 λ§Œλ“ λ‹€.
    • μž¬ν• λ‹Ήμ΄ ν•„μš” μ—†λŠ” κ°’μ—λŠ” const ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•œλ‹€.

    μš°μ„  constλ₯Ό μ‚¬μš©ν•˜κ³  μž¬ν• λ‹Ήμ΄ λ°œμƒν•˜λŠ” 경우라면 κ·Έλ•Œ let ν‚€μ›Œλ“œλ‘œ μˆ˜μ •ν•˜λŠ” 것을 μΆ”μ²œν•œλ‹€.

     

     

    μ°Έκ³ 

    λͺ¨λ˜ μžλ°”μŠ€ν¬λ¦½νŠΈ Deep Dive 

    λŒ“κΈ€

Designed by Tistory.