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

πŸ“° μ–Έμ–΄/JS

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

μ±… <λŸ¬λ‹μžλ°”μŠ€ν¬λ¦½νŠΈ>λ₯Ό 기본으둜 배운 μžλ°”μŠ€ν¬λ¦½νŠΈ λ‚΄μš©μž…λ‹ˆλ‹€.

 

λͺ©μ°¨

  • 1. μ¦‰μ‹œ μ‹€ν–‰ ν•¨μˆ˜, IIFE
  • 2. ν˜Έμ΄μŠ€νŒ…
  • 3. μ‚¬κ°μ§€λŒ€μ™€ 슀트릭트 λͺ¨λ“œ

 

<μŠ€μ½”ν”„>

1. IIFE : μ¦‰μ‹œ ν˜ΈμΆœν•˜λŠ” ν•¨μˆ˜ ν‘œν˜„μ‹

1-1) μ¦‰μ‹œ μ‹€ν–‰ ν•¨μˆ˜μ˜ κΈ°λ³Έ ν˜•μ‹

#일반적인 ν•¨μˆ˜ ν‘œν˜„μ‹
const g = function ν•¨μˆ˜μ΄λ¦„(){
	//...
}


#μ¦‰μ‹œ μ‹€ν–‰ ν•¨μˆ˜ ν‘œν˜„μ‹
(function () {
    //IIFE λ°”λ””
})()

 

1-2) μ¦‰μ‹œ μ‹€ν–‰ ν•¨μˆ˜μ˜ μ’…λ₯˜

#1. κΈ°λͺ… μ¦‰μ‹œ μ‹€ν–‰ ν•¨μˆ˜
(function square(x) {
    console.log(x*x);
})(2);


#2. 읡λͺ… μ¦‰μ‹œ μ‹€ν–‰ ν•¨μˆ˜
(function (x) {
    console.log(x*x);
})(2);


#3. λ³€μˆ˜μ— μ¦‰μ‹œ μ‹€ν–‰ ν•¨μˆ˜ μ €μž₯
(mySquare =function (x) {
    console.log(x*x);
})(2);
mySquare(3);

 

1-3) IIFE의 μž₯점 : 내뢀에 μžˆλŠ” 것듀이 λͺ¨λ‘ μžμ‹ λ§Œμ˜ μŠ€μ½”ν”„λ₯Ό κ°€μ§€μ§€λ§Œ, IIFEμžμ²΄λŠ” ν•¨μˆ˜μ΄λ―€λ‘œ κ·Έ μŠ€μ½”ν”„ λ°–μœΌλ‘œ 무언가λ₯Ό 내보낼 수 있음. ν΄λ‘œμ €λ₯Ό λ§Œλ“€κ³ , ν΄λ‘œμ €μ—κ²Œμ„œ 무언가λ₯Ό λ°˜ν™˜λ°›μ„ λ•Œ μœ μš©ν•¨.

const message = (function() {
    //IIFE λ°”λ””
    const secret = "I am a secret!";  #μ™ΈλΆ€μ—μ„œ μ ‘κ·Ό λΆˆκ°€
    return 'The secret is ${secret.length} characters long.';
})();
console.log(message);

 

 

2. ν˜Έμ΄μŠ€νŒ… : ν•¨μˆ˜ μ•ˆμ— μžˆλŠ” 선언듀을 λͺ¨λ‘ λŒμ–΄μ˜¬λ €μ„œ ν•΄λ‹Ή ν•¨μˆ˜ 유효 λ²”μœ„μ˜ μ΅œμƒλ‹¨μ— μ„ μ–Έν•˜λŠ” 것.

let ν‚€μ›Œλ“œλŠ” λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜κΈ° μ „μ—λŠ” κ·Έ λ³€μˆ˜λŠ” μ‘΄μž¬ν•˜μ§€ μ•Šμ§€λ§Œ, var ν‚€μ›Œλ“œλŠ” μŠ€μ½”ν”„ μ•ˆμ΄λΌλ©΄ μ–΄λ””μ„œλ“  μ‚¬μš©κ°€λŠ₯ν•˜κ³ , 심지어 μ„ μ–Έλ˜κΈ° 전에도 undefined둜 λ³€μˆ˜ μ‚¬μš© κ°€λŠ₯ν•˜λ‹€. → ν˜Έμ΄μŠ€νŒ…

  • ν˜Έμ΄μŠ€νŒ… λ°œμƒO : var λ³€μˆ˜ μ„ μ–Έ, ν•¨μˆ˜μ„ μ–Έλ¬Έ
  • ν˜Έμ΄μŠ€νŒ… λ°œμƒX : let · const λ³€μˆ˜ μ„ μ–Έ, ν•¨μˆ˜ν‘œν˜„μ‹
#ν•¨μˆ˜μ„ μ–Έλ¬Έ - ν˜Έμ΄μŠ€νŒ…o
function foo() { 
	console.log("hello");
}

#ν•¨μˆ˜ν‘œν˜„μ‹ - ν˜Έμ΄μŠ€νŒ…x
var foo2 = function() { 
	console.log("hello2");
}

 

 

3. μ‚¬κ°μ§€λŒ€μ™€ 슀트릭트 λͺ¨λ“œ

3-1) μ‚¬κ°μ§€λŒ€

μ‚¬κ°μ§€λŒ€λž€, let으둜 μ„ μ–Έν•˜λŠ” λ³€μˆ˜λŠ” μ„ μ–Έν•˜κΈ° μ „κΉŒμ§€ μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ”λ‹€λŠ” κ°œλ…μ΄λ‹€.

let으둜 μ„ μ–Έν•  λ³€μˆ˜λŠ” 쑴재λ₯Ό 확인(typeofμ—°μ‚°μž 이용)ν•˜λŠ” 버릇을 κ°€μ Έμ•Ό μ‚¬κ°μ§€λŒ€ errorκ°€ λ‚˜μ§€ μ•ŠλŠ”λ‹€.

 

3-2) 슀트릭트 λͺ¨λ“œ  "use strict"

μ•”μ‹œμ  μ „μ—­ λ³€μˆ˜λž€, var둜 λ³€μˆ˜ μ„ μ–Έν•˜λŠ” 것을 μžŠμ€ λ³€μˆ˜λ“€μ„ μ „μ—­ λ³€μˆ˜λ‘œ κ°„μ£Όν•˜λŠ” 것을 μœ„λ―Έν•œλ‹€.

슀트릭트 λͺ¨λ“œλŠ” μ΄λŸ¬ν•œ μ•”μ‹œμ  μ „μ—­ λ³€μˆ˜λ₯Ό ν—ˆμš©ν•˜μ§€ μ•ŠλŠ”λ‹€.

 

 

[μ°Έκ³  μ‚¬μ΄νŠΈ]

ν˜Έμ΄μŠ€νŒ… - https://gmlwjd9405.github.io/2019/04/22/javascript-hoisting.html