λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

λ…μ„œ λͺ©λ‘/λͺ¨λ”₯λ‹€ Modern JS Deep Dive

[λͺ¨λ”₯λ‹€] 20μž₯ Strict Mode

728x90

🌽 20.1 strict modeλž€?

 

μ„ μ–Έν•˜μ§€ μ•Šμ€ λ³€μˆ˜μ˜ 경우 ReferenceErrorκ°€ 생길 것 κ°™μ§€λ§Œ, 사싀 μ•„λ‹˜. 

JSκ°€ μ•”λ¬΅μ μœΌλ‘œ μ „μ—­ 객체에 λ³€μˆ˜-> ν”„λ‘œνΌν‹°λ₯Ό λ™μ μœΌλ‘œ 생성함. 

=> 암묡적 μ „μ—­

 

암묡적 전역은 였λ₯˜ λ°œμƒμ˜ 원인이 될 ν™•λ₯ μ΄ λ†’μŒ. 

κ·ΈλŸ¬λ‹ˆ λ³€μˆ˜ μ„ μ–Έ ν‚€μ›Œλ“œλ₯Ό κΌ­ 같이 μ‚¬μš©ν•΄μ•Όν•¨. 

 

ν•˜μ§€λ§Œ μ‹€μˆ˜λŠ” μ–Έμ œλ‚˜ λ°œμƒν•˜λŠ”λ° -> 이런 잠재적 였λ₯˜λ₯Ό λ°œμƒμ‹œν‚€κΈ° μ–΄λ €μš΄ 개발 ν™˜κ²½μ„ λ§Œλ“œλŠ”κ²Œ 더 근본적인 ν•΄κ²°μ±…μž„. 

 

strict mode (엄격 λͺ¨λ“œ) 

- ES5 λΆ€ν„° 좔가됨. 

- JS 의 문법을 μ’€ 더 μ—„κ²©νžˆ 적용

-> 였λ₯˜λ₯Ό λ°œμƒμ‹œν‚¬ κ°€λŠ₯성이 λ†’κ±°λ‚˜,

-> JS μ—”μ§„μ˜ μ΅œμ ν™” λ¬Έμ œμ— μž‘μ—…μ„ μΌμœΌν‚¬ 수 μžˆλŠ” μ½”λ“œμ— λŒ€ν•΄

=> λͺ…μ‹œμ μΈ μ—λŸ¬λ₯Ό λ°œμƒμ‹œν‚΄. 

 

ESLint

- strict mode 와 μœ μ‚¬ν•œ 효과λ₯Ό 얻을 수 있음.

- λ¦°νŠΈλ„κ΅¬λŠ” 정적 뢄석과 같은 κΈ°λŠ₯을 톡해 μ†ŒμŠ€μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜κΈ° μ „, μŠ€μΊ” 

=> 문법적 였λ₯˜ 뿐 μ•„λ‹ˆλΌ 잠재적 였λ₯˜κΉŒμ§€ μ°Ύμ•„λ‚΄κ³ , 였λ₯˜μ˜ 원인을 λ¦¬ν¬νŒ… ν•΄μ€Œ. 

- strict mode κ°€ μ œν•œν•˜λŠ” 였λ₯˜ + μ½”λ”© μ»¨λ²€μ…˜μ„ μ„€μ • 파일의 ν˜•νƒœλ‘œ μ •μ˜ν•˜κ³  κ°•μ œν•  수 있음.

- strict mode κ°€ 더 κ°•λ ₯함. 

 

 

 

 

🌽 20.2 strict mode 의 적용

 

μ „μ—­μ˜ 선두 (맨 μœ„) ν˜Ήμ€ ν•¨μˆ˜μ˜ 선두에 'use strict'; μΆ”κ°€

μ „μ—­ -> 슀크립트 전체에 strict mode 적용됨

ν•¨μˆ˜ -> ν•΄λ‹Ή ν•¨μˆ˜μ™€ 쀑첩 ν•¨μˆ˜μ— 적용됨. 

 

맨 μœ„μ— μ•ˆμ“°λ©΄ 말없이 λ™μž‘ μ•ˆν•¨.

 

 

 

 

🌽 20.3 전역에 strict mode λ₯Ό μ μš©ν•˜λŠ” 것은 ν”Όν•˜μž

 

슀크립트 λ‹¨μœ„λ‘œ μ μš©λ˜λŠ”λ°, λ‹€λ₯Έ μŠ€ν¬λ¦½νŠΈμ—λŠ” 영ν–₯을 주지 μ•ŠμŒ. 

그럼 μ μš©ν•œ μŠ€ν¬λ¦½νŠΈλž‘ μ•„λ‹Œ μŠ€ν¬λ¦½νŠΈλž‘ 혼재될 μˆ˜λ„ 있고, 이둜 인해 였λ₯˜κ°€ 생길 μˆ˜λ„ 있음. 

 

 

 

 

 

🌽 20.4 ν•¨μˆ˜ λ‹¨μœ„λ‘œ strict mode λ₯Ό μ μš©ν•˜λŠ” 것은 ν”Όν•˜μž

 

λͺ¨λ“  ν•¨μˆ˜μ— 일일이 μ μš©ν•˜λŠ” 것은 맀우 λ²ˆκ±°λ‘œμ›€. 

적용된 ν•¨μˆ˜κ°€ μ°Έμ‘°ν•  μ™ΈλΆ€ μ»¨ν…μŠ€νŠΈμ— strict mode μ μš©ν•˜μ§€ μ•ŠμœΌλ©΄ 이것도 λ¬Έμ œκ°€ 됨. 

 

 

 

 

🌽 20.5  strict mode κ°€ λ°œμƒμ‹œν‚€λŠ” μ—λŸ¬

 

20.5.1 암묡적 μ „μ—­

μ„ μ–Έν•˜μ§€ μ•Šμ€ λ³€μˆ˜λ₯Ό μ°Έμ‘°ν•˜λ©΄ ReferenceError λ°œμƒ

 

20.5.2 λ³€μˆ˜, ν•¨μˆ˜, λ§€κ°œλ³€μˆ˜μ˜ μ‚­μ œ

delete 둜 μ‚­μ œν•˜λ©΄ SyntaxError λ°œμƒ

(엄격λͺ¨λ“œμ—μ„œ μ‚¬μš©ν•˜λ©΄ μ•ˆλœλ‹€κ³  μ—λŸ¬ 뜸)

 

20.5.3 λ§€κ°œλ³€μˆ˜ μ΄λ¦„μ˜ 쀑볡

SyntaxError 뜸. 

 

20.5.4 with 문의 μ‚¬μš©

with 문은 μ „λ‹¬λœ 객체λ₯Ό μŠ€μ½”ν”„ 체인에 좔가함. SyntaxError 뜸. 

 

 

 

 

 

🌽 20.6  strict mode μ μš©μ— μ˜ν•œ λ³€ν™”

 

20.6.1 일반 ν•¨μˆ˜μ˜ this

ν•¨μˆ˜λ₯Ό μΌλ°˜ν•¨μˆ˜λ‘œ ν˜ΈμΆœν•˜λ©΄ this에 undefined κ°€ 바인딩됨. 

μƒμ„±μž ν•¨μˆ˜ μ•„λ‹ˆλΌμ„œ ν•„μš”μ—†κΈ° λ•Œλ¬Έ. 

μ—λŸ¬λŠ” λ°œμƒν•˜μ§€ μ•ŠμŒ. 

 

20.6.2 arguments 객체

λ§€κ°œλ³€μˆ˜μ— 전달될 인수λ₯Ό μž¬ν• λ‹Ήν•΄μ„œ 변경해도 arguments 객체에 λ°˜μ˜λ˜μ§€ μ•ŠμŒ. 

 

 

 

 

 

728x90
λ°˜μ‘ν˜•