TIL/JavaScript

TIL 14: JS 핡심 κ°œλ…κ³Ό μ£Όμš” 문법

Deviloper😈 2021. 8. 5. 21:46

μ›μ‹œ μžλ£Œν˜•κ³Ό μ°Έμ‘° μžλ£Œν˜•

μ›μ‹œ μžλ£Œν˜•μ˜ λ³€μˆ˜μ—λŠ” ν•˜λ‚˜μ˜ μ›μ‹œ μžλ£Œν˜•λ§Œ 담을 수 μžˆμŠ΅λ‹ˆλ‹€.

λ”°λΌμ„œ μ›μ‹œ μžλ£Œν˜•μ΄ λ‹΄κΈ°λŠ” λ³΄κ΄€ν•¨μ˜ ν¬κΈ°λŠ” κ³ μ •λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. 

μ΄λŸ¬ν•œ 데이터 보관함을 stack이라고 λΆ€λ¦…λ‹ˆλ‹€.

μ›μ‹œ μžλ£Œν˜•μ—λŠ” string, number, bigint, boolean, undefined, symbol, null 이 μžˆμŠ΅λ‹ˆλ‹€.

 

반면 μ°Έμ‘° μžλ£Œν˜•μ€ λ³€μˆ˜μ— ν• λ‹Ή ν•  λ•ŒλŠ” λ³€μˆ˜μ— 값이 μ•„λ‹Œ μ£Όμ†Œλ₯Ό μ €μž₯ν•©λ‹ˆλ‹€. 

이 μ£Όμ†Œλ₯Ό 따라가면 μ›μ‹œ μžλ£Œν˜•κ³Ό 달리 크기가 변동 κ°€λŠ₯ν•œ 데이터 보관함이 μžˆμŠ΅λ‹ˆλ‹€.

μ΄λŸ¬ν•œ 데이터 보관함을 heap이라고 λΆ€λ¦…λ‹ˆλ‹€.

 

κ°„λ‹¨ν•˜κ²Œ μ •λ¦¬ν•˜λ©΄ 'μ›μ‹œ μžλ£Œν˜•μ€ 값을 μ €μž₯ν•˜κ³ , μ°Έμ‘° μžλ£Œν˜•μ€ μ£Όμ†Œλ₯Ό μ €μž₯ν•œλ‹€'둜 정리할 수 μžˆλŠ”λ°μš”.

μ΄λŸ¬ν•œ νŠΉμ„± λ•Œλ¬Έμ— λ³€μˆ˜ aκ°€ λ³€μˆ˜ b에 ν• λ‹Ήν•˜λŠ” κ²½μš°κ°€ 차이가 λ‚˜νƒ€λ‚©λ‹ˆλ‹€.

μ›μ‹œ μžλ£Œν˜•μ˜ 경우 μ•„λž˜μ™€ 같이 μ½”λ“œκ°€ 싀행될 λ•Œ a의 값은 μ—¬μ „νžˆ 3으둜 μœ μ§€λ©λ‹ˆλ‹€.

let a = 3;
let b = a;
b = 7;

반면, μ°Έκ³  μžλ£Œν˜•μ˜ 경우 μ•„λž˜ μ½”λ“œκ°€ μ‹€ν–‰λ˜λ©΄ a의 값은 bκ°€ λ°”λ€λŒ€λ‘œ λ°”λ€Œκ²Œ λ©λ‹ˆλ‹€.

let dessert = {iceCream: 'MintChocolate'};
let cold = dessert;
cold.iceCream = 'Strawberry';

λ˜ν•œ cold λΌλŠ” 배열에 undefinedκ°€ ν• λ‹Ήλ˜λ©΄, 더이상 dessert 배열에 μ ‘κ·Όν•  수 μ—†κ²Œ λ©λ‹ˆλ‹€.

 

 

μŠ€μ½”ν”„ (Scope)

λ²”μœ„(Scope)λŠ” λ²”μœ„κ°€ μ€‘κ΄„ν˜Έ(블둝) λ˜λŠ” ν•¨μˆ˜μ— μ˜ν•΄ λ‚˜λˆ„μ–΄ μ§‘λ‹ˆλ‹€. 

μ•ˆμͺ½ μŠ€μ½”ν”„μ—μ„œ λ°”κΉ₯μͺ½ μŠ€μ½”ν”„λ‘œλŠ” μ ‘κ·Όν•  수 μžˆμ§€λ§Œ λ°˜λŒ€λŠ” λΆˆκ°€λŠ₯ν•©λ‹ˆλ‹€.

 

λ˜ν•œ, μŠ€μ½”ν”„λŠ” 쀑첩이 κ°€λŠ₯ν•©λ‹ˆλ‹€. 

κ°€μž₯ λ°”κΉ₯μͺ½μ˜ μŠ€μ½”ν”„λŠ” μ „μ—­ μŠ€μ½”ν”„(Global Scope)라고 λΆ€λ¦…λ‹ˆλ‹€.

전역이 μ•„λ‹Œ μŠ€μ½”ν”„λŠ” λͺ¨λ‘ μ§€μ—­ μŠ€μ½”ν”„(Local Scope)μž…λ‹ˆλ‹€.

 

λ˜ν•œ μ§€μ—­ λ³€μˆ˜λŠ” μ „μ—­ λ³€μˆ˜λ³΄λ‹€ 더 높은 μš°μ„ μˆœμœ„λ₯Ό κ°€μ§‘λ‹ˆλ‹€. 

λ§Œμ•½ λ°”κΉ₯ λ³€μˆ˜κ°€ μ•ˆμͺ½ λ³€μˆ˜κ°€ λ™μΌν•˜λ‹€λ©΄, λ°”κΉ₯μͺ½ λ³€μˆ˜κ°€ μ•ˆμͺ½ λ³€μˆ˜μ— μ˜ν•΄ κ°€λ €μ§€λŠ” ν˜„μƒμ„ μ‰λ„μž‰(variable shadowing)이라고 ν•©λ‹ˆλ‹€.

 

μŠ€μ½”ν”„μ—λŠ” 두가지 μ’…λ₯˜κ°€ μžˆμŠ΅λ‹ˆλ‹€.

ν•˜λ‚˜λŠ” 블둝 μŠ€μ½”ν”„(Block Scope)둜 μ€‘κ΄„ν˜Έ κΈ°μ€€μœΌλ‘œ λ²”μœ„κ°€ κ΅¬λΆ„λ©λ‹ˆλ‹€.

λ‹€λ₯Έ μŠ€μ½”ν”„λŠ” ν•¨μˆ˜ μŠ€μ½”ν”„(Function Scope)κ°€ μžˆμŠ΅λ‹ˆλ‹€.

ν•¨μˆ˜ 선언식 및 ν•¨μˆ˜ ν‘œν˜„μ‹μœΌλ‘œ λ²”μœ„κ°€ λ‚˜λ‰˜μ–΄μ§‘λ‹ˆλ‹€.

ν•œκ°€μ§€ μ£Όμ˜ν•΄μ•Όν•  점은 ν™”μ‚΄ν‘œ ν•¨μˆ˜λŠ” ν•¨μˆ˜ μŠ€μ½”ν”„κ°€ μ•„λ‹ˆλΌ 블둝 μŠ€μ½”ν”„μž…λ‹ˆλ‹€.

 

 

 

λ³€μˆ˜ μ„ μ–Έ

μŠ€μ½”ν”„μ˜ μ’…λ₯˜μ— 따라 λ³€μˆ˜λ₯Ό μ •μ˜ν•˜λŠ” μ„Έ κ°€μ§€ 방법(let, const, var)이 λ‹€λ₯΄κ²Œ 적용될 수 μžˆμŠ΅λ‹ˆλ‹€.

var은 블둝 μŠ€μ½”ν”„λ₯Ό λ¬΄μ‹œν•˜κ³  ν•¨μˆ˜ μŠ€μ½”ν”„λ§Œ λ”°λ¦…λ‹ˆλ‹€.

단, ν™”μ‚΄ν‘œ ν•¨μˆ˜μ˜ 블둝 μŠ€μ½”ν”„λŠ” λ¬΄μ‹œν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

μ•„λž˜λŠ” λ³€μˆ˜ μ •μ˜ 방법을 μ •λ¦¬ν•œ ν‘œμž…λ‹ˆλ‹€.

  let const var
유효 λ²”μœ„ 블둝 μŠ€μ½”ν”„ 및 ν•¨μˆ˜ μŠ€μ½”ν”„ 블둝 μŠ€μ½”ν”„ 및 ν•¨μˆ˜ μŠ€μ½”ν”„ ν•¨μˆ˜ μŠ€μ½”ν”„
κ°’ μž¬ν• λ‹Ή κ°€λŠ₯ λΆˆκ°€λŠ₯ κ°€λŠ₯
μž¬μ„ μ–Έ λΆˆκ°€λŠ₯ λΆˆκ°€λŠ₯ κ°€λŠ₯

λ³€μˆ˜ μ„ μ–Έμ—μ„œ μ£Όμ˜ν•΄μ•Ό ν•  점이 μžˆμŠ΅λ‹ˆλ‹€.

참고둜 windowλŠ” λΈŒλΌμš°μ €μ—λ§Œ μ‘΄μž¬ν•˜λŠ” 객체라고 ν•©λ‹ˆλ‹€.

λ˜ν•œ μ „μ—­ μ˜μ—­μ„ λ‹΄κ³  μžˆκΈ°λ„ ν•©λ‹ˆλ‹€.

μ „μ—­ μ˜μ—­μ— λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜λ©΄ μ–΄λ””μ„œλ“  접근이 κ°€λŠ₯ν•˜μ§€λ§Œ, μ—¬λŸ¬ μ‚¬λžŒμ΄ 같은 ν”„λ‘œκ·Έλž¨μ„ λ§Œλ“€λ‹€λ³΄λ©΄ λ‘œμ§μ— λ¬Έμ œκ°€ 생길 수 μžˆμŠ΅λ‹ˆλ‹€.

이에 λ”ν•˜μ—¬ μ„ μ–Έ 없이 λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜λŠ” 경우 varλ₯Ό μ‚¬μš©ν•˜λŠ” κ²½μš°μ™€ λΉ„μŠ·ν•˜κ²Œ 되기 λ•Œλ¬Έμ—, μ „μ—­λ³€μˆ˜λ₯Ό μ„ μ–Έν• λ‹Ήν•˜κ²Œ λ˜λŠ” 것이기에 λ¬Έμ œκ°€ 생길 수 μžˆμŠ΅λ‹ˆλ‹€.

이런 경우λ₯Ό λ°©μ§€ν•˜κΈ° μœ„ν•΄ Strict Modeλ₯Ό μ μš©ν•©λ‹ˆλ‹€.

js파일 상단에 'use strict' 라고 ν‘œν˜„ν•˜λ©΄ 적용이 κ°€λŠ₯ν•©λ‹ˆλ‹€.

 

 

ν΄λ‘œμ €

ν΄λ‘œμ € ν•¨μˆ˜λŠ” ν•¨μˆ˜λ₯Ό λ¦¬ν„΄ν•˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€. 

인터넷에 ν΄λ‘œμ €λ₯Ό 찾아보면 무슨 μ˜λ―ΈμΈμ§€ μ •ν™•ν•˜κ²Œ νŒŒμ•…ν•˜κΈ° μ’€ μ–΄λ ΅λ”λΌκ΅¬μš”..!

κ·Έλž˜μ„œ μ œκ°€ μƒκ°ν•˜λŠ” ν΄λ‘œμ € ν•¨μˆ˜μ— λŒ€ν•΄ μ’€ 더 써보렀고 ν•©λ‹ˆλ‹€.

 

μœ„μ²˜λŸΌ λ‹¨μˆœνžˆ ν•¨μˆ˜λ₯Ό λ¦¬ν„΄ν•˜λŠ” ν•¨μˆ˜λΌκ³ λ§Œ ν•˜κΈ°μ—λŠ” ν•œκ³„κ°€ μžˆμŠ΅λ‹ˆλ‹€.

이에 λŒ€ν•΄μ„œλŠ” λ¨Όμ € ν΄λ‘œμ €μ˜ μ˜λ―Έμ— λŒ€ν•΄ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

일단 ν΄λ‘œμ €λΌκ³  ν•˜λŠ” μ΄μœ λŠ” μŠ€μ½”ν”„λ₯Ό μ΄μš©ν•΄μ„œ λ³€μˆ˜κ°€ μ–΄λ””κΉŒμ§€ μ ‘κ·Όν•  수 μžˆλŠ”μ§€ λ²”μœ„λ₯Ό μ •ν•΄μ£ΌκΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.

또 λ‹€λ₯Έ λ§λ‘œλŠ” λ²”μœ„λ₯Ό λ‹«μ•„μ€€λ‹€κ³  ν•  수 있겠죠. κ·Έλž˜μ„œ Closure라고 μ“°μ΄λŠ” κ²λ‹ˆλ‹€.

μš°λ¦¬κ°€ μ΄μ „μ—λŠ” ν•¨μˆ˜ μ•ˆμ˜ λ³€μˆ˜λŠ” ν•¨μˆ˜ μŠ€μ½”ν”„λ‘œ 인해 ν•¨μˆ˜ μ•ˆμ— μ“°μ΄λŠ” κ±Έ λ°°μ› μŠ΅λ‹ˆλ‹€.

이미 λŒ€λΆ€λΆ„μ˜ κ°œλ°œμžκ°€ μ΄λŸ¬ν•œ 사싀을 μ•Œκ³  μžˆμŒμ—λ„ λΆˆκ΅¬ν•˜κ³  ꡳ이 μ €λŸ° μ‹μœΌλ‘œ μ •ν•΄μ£ΌλŠ” μ΄μœ λŠ” λ°”λ‘œ λ‚΄λΆ€ ν•¨μˆ˜μ—μ„œ μ™ΈλΆ€ ν•¨μˆ˜μ—μ„œ κ°€μ Έμ˜¨ λ³€μˆ˜μ™€ λ‚΄λΆ€ ν•¨μˆ˜μ˜ λ³€μˆ˜λ₯Ό λ‘˜ λ‹€ μ‚¬μš©ν•˜κ³  있기 λ•Œλ¬Έμ΄λΌ μƒκ°ν•©λ‹ˆλ‹€.

 

μ—­μ‹œ 말둜 ν’€μ–΄μ“°λŠ” 건 μ–΄λ €μš΄ κ±° κ°™μ•„μš”..γ…‹γ…‹γ…‹γ…‹γ…‹