πŸ’‘ letκ³Ό var의 차이

βœ” var ν‚€μ›Œλ“œμ˜ 문제점

1. λ³€μˆ˜ 쀑볡 μ„ μ–Έ ν—ˆμš©

  • var ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ λ³€μˆ˜λŠ” 쀑볡 선언이 κ°€λŠ₯ν•˜λ‹€
    var x = 1;
    var y = 1;
    
    // var ν‚€μ›Œλ“œλ‘œ μ„ μ–Έλœ λ³€μˆ˜λŠ” 같은 μŠ€μ½”ν”„ λ‚΄μ—μ„œ 쀑볡 선언을 ν—ˆμš©ν•œλ‹€.
    // μ΄ˆκΈ°ν™”λ¬Έμ΄ μžˆλŠ” λ³€μˆ˜ 선언문은 μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진에 μ˜ν•΄ var ν‚€μ›Œλ“œκ°€ μ—†λŠ” κ²ƒμ²˜λŸΌ λ™μž‘ν•œλ‹€.
    var x = 100;
    // μ΄ˆκΈ°ν™”λ¬Έμ΄ μ—†λŠ” λ³€μˆ˜ 선언문은 λ¬΄μ‹œλœλ‹€.
    var y;
    
    console.log(x); // 100
    console.log(y); // 1

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

  • var ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ λ³€μˆ˜λŠ” μ˜€λ‘œμ§€ ν•¨μˆ˜μ˜ μ½”λ“œ λΈ”λ‘λ§Œμ„ 지역 μŠ€μ½”ν”„λ‘œ μΈμ •ν•œλ‹€
  • λ”°λΌμ„œ, ν•¨μˆ˜ μ™ΈλΆ€μ—μ„œ var ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ λ³€μˆ˜λŠ” μ½”νŠΈ 블둝 λ‚΄μ—μ„œ 선언해도 λͺ¨λ‘ μ „μ—­ λ³€μˆ˜κ°€ λœλ‹€
    var i = 10;
    
    // forλ¬Έμ—μ„œ μ„ μ–Έν•œ iλŠ” μ „μ—­ λ³€μˆ˜μ΄κ³ , 이미 μ„ μ–Έλœ μ „μ—­ λ³€μˆ˜ iκ°€ μžˆμœΌλ―€λ‘œ 쀑볡 μ„ μ–Έλœλ‹€.
    for (var i = 0; i < 5; i++){
      console.log(i); // 0 1 2 3 4
    }
    
    // μ˜λ„μΉ˜ μ•Šκ²Œ i λ³€μˆ˜μ˜ 값이 λ³€κ²½λ˜μ—ˆλ‹€.
    console.log(i); // 5

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

  • var ν‚€μ›Œλ“œλ‘œ λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜λ©΄ λ³€μˆ˜ ν˜Έμ΄μŠ€νŒ…μ— μ˜ν•΄, λ³€μˆ˜ 선언문이 μŠ€μ½”ν”„μ˜ μ„ λ‘λ‘œ λŒμ–΄ μ˜¬λΌκ°„ κ²ƒμ²˜λŸΌ λ™μž‘ν•œλ‹€
    // 이 μ‹œμ μ—λŠ” λ³€μˆ˜ ν˜Έμ΄μŠ€νŒ…μ— μ˜ν•΄ 이미 foo λ³€μˆ˜κ°€ μ„ μ–Έλ˜μ—ˆλ‹€
    // λ³€μˆ˜ fooλŠ” undefined둜 μ΄ˆκΈ°ν™”λœλ‹€
    console.log(foo);
    
    // λ³€μˆ˜μ— 값을 ν• λ‹Ή
    foo = 1;
    
    console.log(foo); // 1
    
    // λ³€μˆ˜ 선언은 λŸ°νƒ€μž„ 이전에 JS 엔진에 μ˜ν•΄ μ•”λ¬΅μ μœΌλ‘œ μ‹€ν–‰λœλ‹€
    var foo;

βœ” let ν‚€μ›Œλ“œ

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

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

  • let ν‚€μ›Œλ“œλ‘œ 같은 μ΄λ¦„μ˜ λ³€μˆ˜λ₯Ό μ€‘λ³΅λ˜κ²Œ μ„ μ–Έν•˜λ©΄ μ—λŸ¬κ°€ λ°œμƒν•œλ‹€

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

  • let ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ λ³€μˆ˜λŠ” λͺ¨λ“  μ½”λ“œ 블둝을 지역 μŠ€μ½”ν”„λ‘œ μΈμ •ν•˜λŠ” 블둝 레벨 μŠ€μ½”ν”„λ₯Ό λ”°λ₯Έλ‹€
    let foo = 1; // μ „μ—­ λ³€μˆ˜
    
    if (true) {
      let foo = 2; // 지역 λ³€μˆ˜
      let bar = 3; // 지역 λ³€μˆ˜
    }
    
    console.log(foo); // 1
    console.log(bar); // ReferenceError: bar is not defined

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

  • var ν‚€μ›Œλ“œμ™€λŠ” 달리 λ³€μˆ˜ ν˜Έμ΄μŠ€νŒ…μ΄ λ°œμƒν•˜μ§€ μ•ŠλŠ” κ²ƒμ²˜λŸΌ λ™μž‘ν•œλ‹€
    console.log(foo); // ReferenceError
    let foo;

βœ” const ν‚€μ›Œλ“œ

  • 보톡 μƒμˆ˜λ₯Ό μ„ μ–Έν•˜κΈ° μœ„ν•΄ μ‚¬μš©λœλ‹€

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

  • const ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ λ³€μˆ˜λŠ” λ°˜λ“œμ‹œ μ„ μ–Έκ³Ό λ™μ‹œμ— μ΄ˆκΈ°ν™”ν•˜μ—¬μ•Ό ν•œλ‹€

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

  • const ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ λ³€μˆ˜λŠ” μž¬ν• λ‹Ήμ΄ κΈˆμ§€λœλ‹€

3. μƒμˆ˜

  • μž¬ν• λ‹Ήμ΄ κΈˆμ§€λœ νŠΉμ§•μ„ μ΄μš©ν•΄ const ν‚€μ›Œλ“œλ‘œ μƒμˆ˜λ₯Ό ν‘œν˜„ν•˜λŠ”λ° μ‚¬μš©ν•˜κΈ°λ„ ν•œλ‹€
    // μ„Έμœ¨μ„ μ˜λ―Έν•˜λŠ” 0.1은 λ³€κ²½ν•  수 μ—†λŠ” μƒμˆ˜λ‘œμ„œ μ‚¬μš©λ  값이닀
    // λ³€μˆ˜ 이름을 λŒ€λ¬Έμžλ‘œ μ„ μ–Έν•΄ μƒμˆ˜μž„μ„ λͺ…ν™•νžˆ λ‚˜νƒ€λ‚Έλ‹€
    const TAX_RATE = 0.1;
    
    // μ„Έμ „ 가격
    let preTaxPrice = 100;
    
    // μ„Έν›„ 가격
    let afterTaxPrice = preTaxPrice + (preTaxPrice * TAX_RATE);
    
    console.log(afterTaxPrice); //110

const ν‚€μ›Œλ“œμ™€ 객체

  • const ν‚€μ›Œλ“œλ‘œ μ„ μ–Έλœ λ³€μˆ˜μ— 객체λ₯Ό ν• λ‹Ήν•œ 경우 값을 λ³€κ²½ν•  수 μžˆλ‹€
  • const ν‚€μ›Œλ“œλŠ” μž¬ν• λ‹Ήμ„ κΈˆμ§€ν•  뿐, "λΆˆλ³€"을 μ˜λ―Έν•˜μ§€λŠ” μ•ŠλŠ”λ‹€
  • μƒˆλ‘œμš΄ 값을 μž¬ν• λ‹Ήν•˜λŠ” 것은 λΆˆκ°€λŠ₯ν•˜μ§€λ§Œ, Property의 동적 생성, μ‚­μ œ, 변경을 톡해 객체λ₯Ό λ³€κ²½ν•˜λŠ” 것은 κ°€λŠ₯ν•˜λ‹€
    const person = {
      name : 'Lee'
    };
    
    // κ°μ²΄λŠ” λ³€κ²½ κ°€λŠ₯ν•œ 값이닀. λ”°λΌμ„œ μž¬ν• λ‹Ή 없이 변경이 κ°€λŠ₯ν•˜λ‹€.
    person.name = 'Jo';
    
    console.log(person); // {name : 'Jo'}

0개의 λŒ“κΈ€