var let const

nosibaΒ·2022λ…„ 3μ›” 12일
0

πŸ”Ž var / let / const

λ³€μˆ˜λž€ ? 자료λ₯Ό μž„μ‹œ μ €μž₯ν•˜λŠ” 곡간
였브젝트, μ–΄λ ˆμ΄, ν•¨μˆ˜ λ“± λͺ¨λ“  μžλ£Œλ“€μ„ 담을 수 μžˆλ‹€.

var name = 'kim'

var name μ΄λΌλŠ” 뢀뢄은 μ„ μ–Έ, name = 'kim'을 ν• λ‹Ήν•œλ‹€κ³  ν‘œν˜„ν•œλ‹€.
λ³€μˆ˜λŠ” var, let, constλΌλŠ” 3개 ν‚€μ›Œλ“œλ₯Ό μ΄μš©ν•œλ‹€.
3개의 ν‚€μ›Œλ“œλŠ” μ„ μ–Έ, ν• λ‹Ή, λ²”μœ„μ—μ„œ 차이가 μžˆλ‹€.

1. var

μž¬μ„ μ–Έ O / μž¬ν• λ‹Ή O / λ²”μœ„ function

var name = 'kim';
var name = 'park'; // μž¬μ„ μ–Έκ°€λŠ₯

name = 'lee' // μž¬ν• λ‹Ήκ°€λŠ₯

function test(){
  var name = 'kim';
  console.log(name);  // 'kim'좜λ ₯
}

console.log(name); // μ—λŸ¬

var λ³€μˆ˜λŠ” function λ‚΄μ—μ„œ λ§Œλ“€λ©΄ function λ‚΄μ—μ„œλ§Œ μ“Έ 수 μžˆλ‹€.

2. let

μž¬μ„ μ–Έ x / μž¬ν• λ‹Ή O / λ²”μœ„ {μ€‘κ΄„ν˜Έ}

let name = 'kim';
let name = 'park'; // μ—λŸ¬ μž¬μ„ μ–ΈλΆˆκ°€

name = 'lee' // μž¬ν• λ‹Ήκ°€λŠ₯


if ( 1 == 1 ){
  let age = '20';
  console.log(age); // '20' 좜λ ₯ 
}

console.log(age); //μ—λŸ¬

let λ³€μˆ˜λŠ” μ€‘κ΄„ν˜Έ (for, if, function λ“±) μ•ˆμ—μ„œ λ§Œλ“€λ©΄ μ€‘κ΄„ν˜Έ λ‚΄μ—μ„œλ§Œ μ“Έ μˆ˜μžˆλ‹€.

3. const

μž¬μ„ μ–Έ x / μž¬ν• λ‹Ή X / λ²”μœ„ {μ€‘κ΄„ν˜Έ}

const name = 'kim';
const name = 'park'; // μ—λŸ¬ μž¬μ„ μ–Έ λΆˆκ°€

name = 'lee' // μ—λŸ¬ μž¬ν• λ‹Ή λΆˆκ°€

if ( 1 == 1 ){
  const age = '20';
  console.log(age); // '20' 좜λ ₯ 
}

console.log(age); //μ—λŸ¬

constλŠ” constant의 μ•½μžλ‘œ(μƒμˆ˜, λ³€ν•˜μ§€ μ•ŠλŠ” κ°’) μž¬μ„ μ–Έ, μž¬ν• λ‹Ήμ΄ λΆˆκ°€ν•˜λ‹€.
letκ³Ό λ§ˆμ°¬κ°€μ§€λ‘œ μ€‘κ΄„ν˜Έμ•ˆμ—μ„œ λ§Œλ“€λ©΄ μ€‘κ΄„ν˜Έ λ‚΄μ—μ„œλ§Œ μ“Έ μˆ˜μžˆλ‹€.

πŸ€” const λ³€μˆ˜μ— 였브젝트λ₯Ό λ‹΄μœΌλ©΄?

const object = { name : 'Kim' }
object.name = 'Park'; //κ°€λŠ₯ 

const λ³€μˆ˜μ— 였브젝트λ₯Ό λ‹΄μœΌλ©΄ 였브젝트 λ‚΄μ˜ λ°μ΄ν„°λŠ” λ³€κ²½ κ°€λŠ₯ν•˜λ‹€.
μ—„λ°€νžˆ λ”°μ§€λ©΄ λ³€μˆ˜ 자체λ₯Ό μž¬ν• λ‹Ή ν•œκ²ƒμ΄ μ•„λ‹Œ 였브젝트 λ‚΄λΆ€ 값을 λ³€κ²½ν•œ 것

const object = { name : 'Kim' };
Object.freeze(object);

object.name = 'Park'; //λ³€κ²½λ˜μ§€ μ•ŠμŒ

μ™„μ „ λ³€κ²½λΆˆκ°€λŠ₯ν•œ 였브젝트λ₯Ό λ§Œλ“€κ³  μ‹Άλ‹€λ©΄ Object.freeze() μ‚¬μš©
ν•˜μ§€λ§Œ 였브젝트 λ‚΄μ˜ μ˜€λΈŒμ νŠΈκΉŒμ§€ freezeν•΄μ£Όμ§„ μ•ŠλŠ”λ‹€.

πŸ”Ž μžλ°”μŠ€ν¬λ¦½νŠΈ λ³€μˆ˜, ν•¨μˆ˜μ˜ Hoisting ν˜„μƒ

λ³€μˆ˜, ν•¨μˆ˜μ˜ 선언을 λ³€μˆ˜ λ²”μœ„, ν•¨μˆ˜ λ²”μœ„ λ§¨μœ„λ‘œ 끌고 μ˜€λŠ” ν˜„μƒ

// λ³€μˆ˜μ„ μ–Έ

  var name = 'Kim';   


//μžλ°”μŠ€ν¬λ¦½νŠΈκ°€ ν•΄μ„ν•˜λŠ” μˆœμ„œ

  var name;
  name = 'Kim';

var 뿐만 μ•„λ‹ˆλΌ let, const둜 λ§Œλ“€μ–΄λ„ hoistingν˜„μƒμ΄ μΌμ–΄λ‚˜μ§€λ§Œ μ•½κ°„μ˜ 차이가 μžˆλ‹€.

//예제 1
console.log(name); // undefined
var name = 'kim';

//예제 2
console.log(name); // μ—λŸ¬
let name = 'kim';

undefinedλŠ” λ³€μˆ˜κ°€ μ„ μ–Έ λ˜μ—ˆλŠ”λ° 값이 ν• λ‹Ήλ˜μ§€ μ•Šμ•˜μ„ λ•Œ 좜λ ₯λ˜λŠ” μΌμ’…μ˜ μžλ£Œν˜•
var λ³€μˆ˜λŠ” hoisting μ‹œ undefinedκ°€ ν• λ‹Ήλœλ‹€.
let, const λ³€μˆ˜λŠ” hoisting λ˜μ§€λ§Œ var λ³€μˆ˜μ²˜λŸΌ μ§€λ™μœΌλ‘œ undefined κ°€ ν• λ‹Ήλ˜μ§€ μ•ŠλŠ”λ‹€.(temporal deadzone / uninitialized)

πŸ”Ž μ „μ—­λ³€μˆ˜μ™€ λ³€μˆ˜μ˜ μ°Έμ‘°

λ³€μˆ˜μ˜ νŠΉμ§•μ€ λ°”κΉ₯에 μžˆλŠ” λ³€μˆ˜λŠ” μ•ˆμͺ½μ—μ„œ 자유둭게 μ°Έμ‘° κ°€λŠ₯ν•˜λ‹€. (closure)

var age = 20

function ν•¨μˆ˜(){
  console.log(age) //μ°Έμ‘°
}

ν•¨μˆ˜(); // 20 좜λ ₯

μ „μ—­λ³€μˆ˜λž€ λͺ¨λ“  ν•¨μˆ˜λ‚˜ ifλ¬Έ, forλ¬Έ λ‚΄λΆ€μ—μ„œ κ³΅ν†΅μ μœΌλ‘œ μ‚¬μš©ν•  수 μžˆλŠ” (μ°Έμ‘°ν•  수 μžˆλŠ”) μœ μš©ν•œ λ³€μˆ˜λ₯Ό λœ»ν•œλ‹€.
var ν‚€μ›Œλ“œλŠ” μ „μ—­λ³€μˆ˜λ₯Ό λ§Œλ“€λ©΄ window에 λ³΄κ΄€λœλ‹€. (μ „μ—­ ν•¨μˆ˜λ„ window에 μžλ™μœΌλ‘œ λ³΄κ΄€λœλ‹€.)

var age = 20;

console.log(age); // 20 좜λ ₯
console.log(window.age) // λ˜‘κ°™μ΄ 20 좜λ ₯

μ „μ—­λ³€μˆ˜λ₯Ό 쑰금 더 μ—„κ²©ν•˜κ²Œ κ΄€λ¦¬ν•˜κ±°λ‚˜ ꡬ뢄짓고 μ‹ΆμœΌλ©΄ windowλ₯Ό ν™œμš©ν•œλ‹€.

window.age = 20;  //μ „μ—­λ³€μˆ˜λ§Œλ“€κΈ°
console.log(window.age);  //μ „μ—­λ³€μˆ˜μ‚¬μš©ν•˜κΈ°
window.age = 30;  //μ „μ—­λ³€μˆ˜λ³€κ²½ν•˜κΈ°

0개의 λŒ“κΈ€