🦎[λ”₯λ‹€μ΄λΈŒ μŠ€ν„°λ””] 4μž₯ & 15μž₯. λ³€μˆ˜, λΈ”λ‘λ ˆλ²¨ μŠ€μ½”ν”„

이지·2021λ…„ 11μ›” 14일
0

DeepDive

λͺ©λ‘ 보기
11/13

1. μ‹λ³„μžκ°€ 무엇인지 μ„€λͺ…ν•΄λ³΄μ‹œμ˜€.

λ³€μˆ˜μ˜ 이름을 μ˜λ―Έν•œλ‹€. λ©”λͺ¨λ¦¬κ³΅κ°„에 μ €μž₯된 값을 λ‹€μ‹œμ½μ–΄ μž¬μ‚¬μš© ν•  수 μžˆλ„λ‘, μ €μž₯된 λ©”λͺ¨λ¦¬ 곡간에 상징적인 이름을 뢙인 것이닀. μ‹λ³„μžλŠ” 값이 μ•„λ‹ˆλΌ λ©”λͺ¨λ¦¬μ˜ μ£Όμ†Œλ₯Ό κΈ°μ–΅ν•œλ‹€. 즉 λ©”λͺ¨λ¦¬ μ£Όμ†Œμ— 뢙인 이름을 μ‹λ³„μžλΌκ³  ν•œλ‹€.

2. λ³€μˆ˜ ν˜Έμ΄μŠ€νŒ…μ— λŒ€ν•΄μ„œ μ„€λͺ…ν•΄λ³΄μ‹œμ˜€.

μ†ŒμŠ€μ½”λ“œκ°€ ν•œ 쀄 ν•œ 쀄 순차적으둜 μ‹€ν–‰λ˜λŠ” μ‹œμ μ„ 'λŸ°νƒ€μž„' 이라고 ν•œλ‹€. μžλ°”μŠ€ν¬λ¦½νŠΈμ—”μ§„μ€ λŸ°νƒ€μž„ 이전인 μ†ŒμŠ€μ½”λ“œμ˜ 평가 κ³Όμ •μ—μ„œ λ³€μˆ˜ 선언을 ν¬ν•¨ν•œ λͺ¨λ“  μ„ μ–Έλ¬Έ (λ³€μˆ˜ μ„ μ–Έλ¬Έ : let, var, const, ν•¨μˆ˜ μ„ μ–Έλ¬Έ: function , class ν‚€μ›Œλ“œ) 등을 μ†ŒμŠ€μ½”λ“œμ—μ„œ μ°Ύμ•„λ‚΄ λ¨Όμ € μ‹€ν–‰ν•œλ‹€.

3. μ•„λž˜ μ½”λ“œμ—μ„œ μ˜ˆμƒλ˜λŠ” 좜λ ₯ 값을 λ§ν•˜κ³  이유λ₯Ό μ„€λͺ…ν•΄λ³΄μ‹œμ˜€.

console.log(score); //Q1. ?? 
//undefined κ°€ 좜λ ₯λœλ‹€. λ³€μˆ˜ μ„ μ–ΈλΆ€κ°€ ν˜Έμ΄μŠ€νŒ… λ˜μ§€λ§Œ 할당은 λŸ°νƒ€μž„μ—μ„œ 이뀄지기 λ•Œλ¬Έμ΄λ‹€. 

score = 80;
var score;

console.log(score); //Q2. ?? ν• λ‹ΉκΉŒμ§€ λλ‚˜μ„œ.. 80? 

1. μ•„λž˜μ˜ μ½”λ“œλ₯Ό μ‹€ν–‰ν•  λ•Œ 좜λ ₯λ˜λŠ” κ°’κ³Ό λ°œμƒν•  수 μžˆλŠ” λ¬Έμ œμ μ— λŒ€ν•΄μ„œ μ„€λͺ…ν•˜κ³  λΆ€μž‘μš©μ„ κ°œμ„ μ‹œν‚€λŠ” λ°©ν–₯으둜 μ½”λ“œλ₯Ό μˆ˜μ •ν•΄λ³΄μ‹œμ˜€.

var x = 1;

if (true) {
  var x = 10;
}

console.log(x); //Q1. 좜λ ₯λ˜λŠ” 값은? 10
// var λŠ” μ˜€λ‘œμ§€ ν•¨μˆ˜μ˜ μ½”λ“œλΈ”λ‘λ§Œμ„ 지역 μŠ€μ½”ν”„λ‘œ μΈμ •ν•œλ‹€.
// if λŠ” ν•¨μˆ˜κ°€μ•„λ‹ˆκΈ° λ•Œλ¬Έμ—, λΈ”λ‘λ‚΄μ—μ„œ λ³€μˆ˜λ₯Ό 선언해도 λͺ¨λ‘ μ „μ—­λ³€μˆ˜κ°€ λœλ‹€.

var i = 100;

for (var i = 0; i < 5; i++) {
  console.log(i); //Q2. 좜λ ₯λ˜λŠ” 값은? 01234
}

console.log(i); //Q3. 좜λ ₯λ˜λŠ” 값은?  5 

//Q4. λ°œμƒν•  수 μžˆλŠ” λ¬Έμ œμ μ€?
//μ „μ—­μ—μ„œ 100으둜 값을 ν• λ‹Ήν–ˆμŒμ—λ„ λΆˆκ΅¬ν•˜κ³ , for λ¬Έμ•ˆμ—μ„œ 쀑볡선언이 λ°œμƒν•˜μ—¬ 
// μ˜λ„μΉ˜μ•Šκ²Œ i λ³€μˆ˜μ˜ κ°’ λ§ˆμ € λ³€κ²½λ˜κ³  λ§μ•˜λ‹€.!
//Q5. μˆ˜μ •λœ μ½”λ“œ

function foo(){
	let i =100;
	for (let i = 0; i <5; i++){
		console.log(i) // 0,1,2,3,4
	}
	console.log(i) // μ΄λ•Œ 100이 좜λ ₯λœλ‹€. 
}

2. let ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ λ³€μˆ˜λŠ” λ³€μˆ˜ ν˜Έμ΄μŠ€νŒ…μ΄ λ°œμƒν•˜μ§€ μ•ŠλŠ” κ²ƒμ²˜λŸΌ λ™μž‘ν•œλ‹€. μ•„λž˜μ˜ μ½”λ“œλ₯Ό μ‹€ν–‰ν–ˆμ„ λ•Œ 좜λ ₯λ˜λŠ” 값을 μ„€λͺ…ν•˜κ³  μ΄λŸ¬ν•œ let ν‚€μ›Œλ“œμ˜ νŠΉμ„±μ΄ 무엇인지에 λŒ€ν•΄μ„œ μ„€λͺ…ν•΄λ³΄μ‹œμ˜€.

console.log(foo); //Q1. 좜λ ₯λ˜λŠ” 값은? ref err

let foo;
console.log(foo); //Q2. 좜λ ₯λ˜λŠ” 값은? undefined
//undefined 아직 μ„ μ–Έλ§Œ λ˜μ—ˆκΈ° λ•Œλ¬Έμ— 

foo = 1;
console.log(foo); //Q3. 좜λ ₯λ˜λŠ” 값은? 1
//1 할당도 마쳀기 λ•Œλ¬Έμ—. 

//Q4. λ³€μˆ˜μ˜ ν˜Έμ΄μŠ€νŒ…μ΄ λ°œμƒν•˜μ§€ μ•ŠλŠ” κ²ƒμ²˜λŸΌ λ™μž‘ν•˜λŠ” let ν‚€μ›Œλ“œμ˜ νŠΉμ„±μ€?
//let 은 선언단계와 μ΄ˆκΈ°ν™”λ‹¨κ³„κ°€ λΆ„λ¦¬λ˜μ–΄, λŸ°νƒ€μž„λ•Œ λ³€μˆ˜μ„ μ–Έλ¬Έμ— 도달해야 μ΄ˆκΈ°ν™”κ°€ μ΄λ€„μ§€κΈ°λ•Œλ¬Έμ—
//ν˜Έμ΄μŠ€νŒ…μ΄ λ˜μ§€ μ•ŠλŠ”κ²ƒμ²˜λŸΌ 보여지기도 ν•œλ‹€. TDZ라고 ν•œλ‹€. ν•˜μ§€λ§Œ μ‹€μ œλ‘œλŠ” ν˜Έμ΄μŠ€νŒ…μ΄ μΌμ–΄λ‚˜λ©°, 
//μ΄ˆκΈ°ν™”μ‹œμ κΉŒμ§€ μΌμ‹œμ μΈ μ‚¬κ°μ§€λŒ€μ— λ†“μ΄λŠ” 것이닀. 

3. κ·Έλ ‡λ‹€λ©΄ let ν‚€μ›Œλ“œλŠ” μ‹€μ œλ‘œ ν˜Έμ΄μŠ€νŒ…μ΄ λ°œμƒν•˜μ§€ μ•ŠλŠ” κ²ƒμΌκΉŒ? μ•„λž˜μ˜ μ½”λ“œλ₯Ό μ‹€ν–‰ν–ˆμ„ λ•Œ 값을 μ‚¬μš©ν•˜μ—¬ μ„€λͺ…ν•΄λ³΄μ‹œμ˜€.

let foo = 1;

{
  console.log(foo); //Q1. 좜λ ₯λ˜λŠ” 값은? // ref err
  let foo = 2;
}

//Q2. let ν‚€μ›Œλ“œλŠ” ν˜Έμ΄μŠ€νŒ…μ΄ λ°œμƒν•˜μ§€ μ•ŠλŠ” κ²ƒμΌκΉŒ?
// μ•„λ‹ˆλ‹€. λ³€μˆ˜ ν˜Έμ΄μŠ€νŒ…μ΄ λ°œμƒν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄. μ „μ—­λ³€μˆ˜ fooλ₯Ό 좜λ ₯ν•΄μ•Όν•˜λŠ”λ°. μ—¬μ „νžˆ ν˜Έμ΄μŠ€νŒ…μ΄ λ°œμƒν•˜μ—¬ errκ°€ λ‚œλ‹€. 

4. 좜λ ₯값을 κ΅¬ν•˜κ³  κ·Έ μ΄μœ λŠ”?

const person = {
	name:'lee'
}

person.name = 'kim';
console.log(person) // { name: 'kim' };

//const λ³€μˆ˜λŠ” κ°’μ˜ μž¬μ„ μ–Έ μž¬ν• λ‹Ήμ΄ κΈˆμ§€λœλ‹€. μ—¬κΈ°μ„œ κΈˆμ§€λŠ” ꢌ고의 의미둜 κ°•μ œμ˜ μ˜λ―ΈλŠ” μ•„λ‹ˆλ‹€.
//즉 μž¬ν• λ‹Ήμ„ κΈˆμ§€ν•  뿐 "λΆˆλ³€"을 보μž₯ν•˜μ§€λŠ” μ•ŠλŠ”λ‹€λŠ” 말이닀.
//primitive type의 값을 ν• λ‹Ήν–ˆμ„ 경우, λΆˆλ³€μ„±μ΄ 보μž₯λœλ‹€.
//reference type의 값이 ν• λ‹Ήλœ 경우, κ°μ²΄λŠ” μž¬ν• λ‹Ή 없이도 직접 변경이 κ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.
//person κ°’ 자체λ₯Ό μž¬ν• λ‹Ήν•˜λŠ” 것은 λΆˆκ°€λŠ₯ν•˜λ‹€.  
profile
μ΄μ§€ν”Όμ§€λ ˆλͺ¬μŠ€ν€΄μ§€πŸ‹

0개의 λŒ“κΈ€

κ΄€λ ¨ μ±„μš© 정보