Front-End/JavaScript

[μžλ°”μŠ€λ¦½νŠΈ(JavaScript )] 13. Strict mode

Bigone17 2022. 3. 15. 10:54

 

🟑 1. Strict mode

function func(){
	x = 1;
}

func();

 - μœ„ μ½”λ“œλ₯Ό 싀행을 μ‹œν‚€λ©΄ 싀행이 잘 λ©λ‹ˆλ‹€. κ·ΈλŸ¬ν•œ μ΄μœ λŠ” μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” xκ°€ μ–΄λ””μ—μ„œ 선언이 λ˜μ—ˆλŠ”μ§€ μ²˜μŒμ—λŠ” ν•¨μˆ˜ λ‚΄μ—μ„œ μ°Ύμ•„λ΄…λ‹ˆλ‹€. ν•¨μˆ˜ μ•ˆμ—μ„œ μ—†μœΌλ©΄ ν•¨μˆ˜ λ°–μœΌλ‘œ λ‚˜μ™€ μ „μ—­ λ³€μˆ˜μ—μ„œ μ°Ύμ•„λ΄…λ‹ˆλ‹€. λ§Œμ•½ μ „μ—­ λ³€μˆ˜μ—μ„œλ„ μ—†μœΌλ©΄ μ—λŸ¬λŠ” λ‚΄λŠ” 것이 μ•„λ‹ˆλΌ, μ•”λ¬΅μ μœΌλ‘œ μ „μ—­ 객체에 xλΌλŠ” λ³€μˆ˜ λ™μ μœΌλ‘œ μƒμ„±ν•©λ‹ˆλ‹€. μ΄λŸ¬ν•œ λ³€μˆ˜λ₯Ό 암묡적 μ „μ—­ λ³€μˆ˜(implicit global)라 ν•©λ‹ˆλ‹€. 개발자의 μ˜λ„μ™€λŠ” 상관없이 암묡적 μ „μ—­ λ³€μˆ˜κ°€ 생성이 되고 μ‹€ν–‰λ˜λŠ” 것을 막기 μœ„ν•΄ ES5λΆ€ν„°λŠ” strict modeκ°€ μΆ”κ°€λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

 

'use strict'

function func(){
	x = 10; // Uncaught ReferenceError: x is not defined
}

func();

- strict modeλ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” μ½”λ“œ 상단에 'use strict'λ₯Ό μž‘μ„±ν•˜κ³  μ½”λ“œλ₯Ό μž‘μ„±ν•˜λ©΄ λ©λ‹ˆλ‹€. 

- use strictκ°€ 어디에 μž‘μ„±λ˜μ—ˆλƒμ— 따라 μ–΄λ–€ 뢀뢄은 암묡적 μ „μ—­ λ³€μˆ˜ 생성을 ν—ˆμš©ν•˜κ²Œ 되고, μ–΄λ–€ 뢀뢄은 ν—ˆμš©μ„ μ•ˆ ν•˜κ²Œ λ©λ‹ˆλ‹€. 

 

🟣 use strictκ°€ ν•¨μˆ˜ λ‹¨μœ„λ‘œ μžˆλŠ” 경우

// use strictκ°€ ν•¨μˆ˜ μ•ˆμ— μžˆλŠ” 경우

function func () {
    x = 10; // μ—λŸ¬κ°€ λ°œμƒν•˜μ§€ μ•ŠμŒ
}

function func2() {
	'use strict';
	y = 20; // Uncaught ReferenceError: y is not defined
}

func();
func2();

 

🟣 use strictκ°€ μ „μ—­μœΌλ‘œ μžˆλŠ” 경우

// use strictμ „μ—­ 선두에 μžˆλŠ” 경우

'use strict';

function func () {
    x = 10; // Uncaught ReferenceError: x is not defined
}

function func2() {
	y = 20; // Uncaught ReferenceError: y is not defined
}

func();
func2();

 

🟒 use strict μ‚¬μš© μ‹œ 주의 사항

1. 슀크립트 전역에 μ‚¬μš©ν•˜μ§€ 말기.

 // 전역에 μ‚¬μš©ν•˜μ§€ 말기
<!DOCTYPE html>
<html>
<body>
  <script>
    'use strict';
  </script>
  <script>
    x = 1; // μ—λŸ¬κ°€ λ°œμƒν•˜μ§€ μ•ŠλŠ”λ‹€.
    console.log(x); // 1
  </script>
  <script>
    'use strict';

    y = 1; // ReferenceError: y is not defined
    console.log(y);
  </script>
</body>
</html>

- 전역에 μ‚¬μš©ν•  경우 μ μš©ν•œ μŠ€ν¬λ¦½νŠΈμ—μ„œλ§Œ μž‘λ™μ„ ν•˜λ―€λ‘œ, use strictλ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” μŠ€ν¬λ¦½νŠΈμ™€ 좩돌이 λ‚  수 μžˆμŠ΅λ‹ˆλ‹€.

 

2. ν•¨μˆ˜ λ‹¨μœ„λ‘œ μ‚¬μš©ν•˜μ§€ 말기.

// ν•¨μˆ˜ λ‹¨μœ„λ‘œ 적용 X
function func1(){
	'use strict';
	x = 100; //Uncaught ReferenceError: x is not defined
}


function func2() {
	'use strict';
    y = 10; //Uncaught ReferenceError: y is not defined
}

- 일일이 strict modeλ₯Ό μ μš©ν•˜λŠ” 것이 번거둜운 일이기도 ν•˜κ³ , μ™ΈλΆ€μ˜ μ½˜ν…μŠ€νŠΈλ₯Ό μ°Έμ‘°ν•  λ•Œ λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

3. μ¦‰μ‹œ μ‹€ν–‰ ν•¨μˆ˜λ‘œ 감싼 슀크립트 λ‹¨μœ„λ‘œ μ‚¬μš©ν•˜κΈ°.

(function (){
	'use strict';
    let a = 10;
    let b = 20;
}());

 

 

🎈 ESLint

- use strict λŒ€μ‹  ESLintλΌλŠ” ν™•μž₯ 도ꡬλ₯Ό μ‚¬μš©ν•˜λ©΄ 보닀 μœ μš©ν•˜κ²Œ 코딩을 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

 

πŸ“ μ •λ¦¬ 

  • μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œλŠ” μ„ μ–Έν•˜μ§€ μ•Šμ€ λ³€μˆ˜μ— 값을 ν• λ‹Ήν•˜λ©΄ μ•”λ¬΅μ μœΌλ‘œ μ „μ—­ λ³€μˆ˜κ°€ 생성이 λœλ‹€.
  • 암묡적 μ „μ—­ λ³€μˆ˜ 생성을 막기 μœ„ν•΄ strict modeλ₯Ό μ‚¬μš©ν•œλ‹€.
  • strict modeλ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” 'use strict'λ₯Ό μ“°κ³  ν•˜λ‹¨μ— μ½”λ“œλ₯Ό μž‘μ„±ν•˜λ©΄ λœλ‹€.
  • μ¦‰μ‹œ μ‹€ν–‰ ν•¨μˆ˜λ‘œ 감싼 슀크립트 λ‹¨μœ„λ‘œ μ‚¬μš©ν•˜λŠ” 것이 λ°”λžŒμ§ν•˜λ‹€.

 

 

 

κΈ΄ κΈ€ μ½μ–΄μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€ :) 
ν‹€λ¦° λ‚΄μš©μ΄ μžˆκ±°λ‚˜, 덧뢙일 λ‚΄μš©μ΄ μžˆλ‹€λ©΄ μ–Έμ œλ“ μ§€ λŒ“κΈ€ λ‹¬μ•„μ£Όμ„Έμš”!
제 글이 μ‘°κΈˆμ΄λ‚˜λ§ˆ μ½μœΌμ‹  λΆ„λ“€μ—κ²Œ 도움이 λ˜λ„λ‘ λ…Έλ ₯ν•˜κ² μŠ΅λ‹ˆλ‹€
λ‹€μŒ νŽΈμ— λ΄¬μš”~

 

728x90
λ°˜μ‘ν˜•