Programming/JavaScript

[JavaScript] 읡λͺ…ν•¨μˆ˜(Anonymous function) λž€ 무엇인가?

yuri lee 2022. 10. 12. 08:34
λ°˜μ‘ν˜•

Intro

javascript의 읡λͺ…ν•¨μˆ˜μ— λŒ€ν•΄ μ•Œμ•„λ³΄λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€. 

 

Anonymous function

읡λͺ… ν•¨μˆ˜λŠ” μ—°κ²°λœ μ΄λ¦„이 μ—†λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€. μΌλ°˜μ μœΌλ‘œ JavaScriptμ—μ„œ ν•¨μˆ˜λ₯Ό μ •μ˜ν•˜κΈ° μœ„ν•΄ ν•¨μˆ˜ μ΄λ¦„ μ•žμ— function ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜μ§€λ§Œ JavaScript의 μ΅λͺ… ν•¨μˆ˜μ—μ„œλŠ” ν•¨μˆ˜ μ΄λ¦„ μ—†μ΄ function ν‚€μ›Œλ“œλ§Œ μ‚¬μš©ν•©λ‹ˆλ‹€.

읡λͺ… ν•¨μˆ˜λŠ” 처음 μƒμ„±λœ ν›„μ—λŠ” μ ‘κ·Όν•  수 μ—†μœΌλ©° κ°’μœΌλ‘œ ν•¨μˆ˜λ‘œ μ €μž₯된 λ³€μˆ˜λ‘œλ§Œ μ ‘κ·Όν•  수 μžˆμŠ΅λ‹ˆλ‹€. 읡λͺ… ν•¨μˆ˜λŠ” μ—¬λŸ¬ 인수λ₯Ό κ°€μ§ˆ μˆ˜λ„ μžˆμ§€λ§Œ ν•˜λ‚˜μ˜ ν‘œν˜„μ‹λ§Œ κ°€μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€.

 

Syntax

function() {
    // Function Body
 }

function ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ μ„ μ–Έν•˜μ˜€μŠ΅λ‹ˆλ‹€. 

( () => {
    // Function Body...
} )();

ν™”μ‚΄ν‘œ ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ μ•„λž˜μ™€ 같이 μ„ μ–Έν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. 

 

Example

#1

<script>
var greet = function () {
    console.log("Welcome to GeeksforGeeks!");
};
 
greet();
</script>

// Welcome to GeeksforGeeks!

이 μ˜ˆμ œμ—μ„œλŠ” μ½˜μ†”μ— λ©”μ‹œμ§€λ₯Ό 좜λ ₯ν•˜λŠ” 읡λͺ…ν•¨μˆ˜λ₯Ό μ •μ˜ν•©λ‹ˆλ‹€. 이후 ν•¨μˆ˜λŠ” greet λ³€μˆ˜μ— μ €μž₯λ©λ‹ˆλ‹€. greet()λ₯Ό ν˜ΈμΆœν•˜μ—¬ ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 

 

#2

<script>
var greet = function (platform) {
    console.log("Welcome to ", platform);
};
 
greet("GeeksforGeeks!");
</script>

// Welcome to GeeksforGeeks!

 μ΄ μ˜ˆμ œμ—μ„œλŠ” 읡λͺ…ν•¨μˆ˜μ— argumentsλ₯Ό μ „λ‹¬ν•©λ‹ˆλ‹€. 

#3

<script>
setTimeout(function () {
    console.log("Welcome to GeeksforGeeks!");
}, 2000);
</script>

javascriptλŠ” κ³ μ°¨ν•¨μˆ˜ (Higher-Order Functions)을 μ§€μ›ν•˜λ―€λ‘œ 읡λͺ…ν•¨μˆ˜λ₯Ό λ§€κ°œλ³€μˆ˜λ‘œ λ‹€λ₯Έ ν•¨μˆ˜μ— 전달할 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.  이 μ˜ˆμ œμ—μ„œλŠ” 읡λͺ… ν•¨μˆ˜λ₯Ό μ½œλ°±ν•¨μˆ˜λ‘œ setTimeout() λ©”μ„œλ“œμ— μ „λ‹¬ν•©λ‹ˆλ‹€. 2000ms 후에 μœ„ 읡λͺ…ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•˜κ²Œ λ©λ‹ˆλ‹€. 

 

#4

<script>
(function () {
    console.log("Welcome to GeeksforGeeks!");
})();
</script>

// Welcome to GeeksforGeeks!

μ΄ˆκΈ°ν™” 직후 ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό 자체 μ‹€ν–‰ ν•¨μˆ˜(Self Executing Function) 라고도 ν•©λ‹ˆλ‹€. κ΄„ν˜Έ μΆ”κ°€ μ‹œ 읡λͺ… ν•¨μˆ˜λ₯Ό μ¦‰μ‹œ μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 

#5

<script>
var greet = () =>
{
    console.log("Welcome to GeeksforGeeks!");
}
 
greet();
</script>

 ES6은 Arrow Functions둜 μ•Œλ €μ§„ μ΅λͺ… ν•¨μˆ˜λ₯Ό μ„ μ–Έν•˜λŠ” μƒˆλ‘­κ³  λ” μ§§μ€ λ°©λ²•μ„ λ„μž…ν–ˆμŠ΅λ‹ˆλ‹€. Arrow ν•¨μˆ˜μ—μ„œλŠ” function ν‚€μ›Œλ“œκ°€ ν•„μš”ν•˜μ§€ μ•Šλ‹€λŠ” μ μ„ μ œμ™Έν•˜κ³  λͺ¨λ“  κ²ƒμ΄ λ™μΌν•˜κ²Œ μœ μ§€λ©λ‹ˆλ‹€. μ—¬κΈ°μ—μ„œ λ‹¨μΌ κ΄„ν˜Έλ‘œ ν•¨μˆ˜λ₯Ό μ •μ˜ν•œ λ‹€μŒ '=>' λ‹€μŒμ— ν•¨μˆ˜ λ³Έλ¬Έμ΄ μ˜΅λ‹ˆλ‹€.

#6

<script>
  let greet = () => console.log("Welcome to GeeksforGeeks!");
  greet();
</script>

  ν•¨μˆ˜ 본문에 λͺ…령문이 ν•˜λ‚˜λ§Œ μžˆλŠ” 경우 μ€‘κ΄„ν˜Έλ₯Ό μ œκ±°ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

#7

// JavaScript code..
 
(() => {
  console.log("GeeksforGeeks");
})();
 
// This code is contributed by Aman Singla...

 

Disadvantage

ν˜Έμ΄μŠ€νŒ… (ν•¨μˆ˜ 선언보닀 ν•¨μˆ˜ 호좜이 μœ— 쀄에 μœ„μΉ˜ν•΄λ„ μ‹€ν–‰λ˜λŠ” κΈ°λŠ₯)이 μ μš©λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 읡λͺ… ν•¨μˆ˜λŠ” ν˜Έμ΄μŠ€νŒ…μ΄ μž‘λ™ν•˜μ§€  μ•Šκ³ , 일반 ν•¨μˆ˜λŠ” μž‘λ™ν•œλ‹€λŠ” 것을 κΈ°μ–΅ν•˜λ„λ‘ ν•©μ‹œλ‹€. 

//읡λͺ… ν•¨μˆ˜ 호좜
hello( );

//읡λͺ… ν•¨μˆ˜ μ„ μ–Έ
var hello = function( ) {
  document.write("Thello");
};
// result : 였λ₯˜
//일반 ν•¨μˆ˜ 호좜
hello( );
// result : hello!

//일반 ν•¨μˆ˜ μ„ μ–Έ
function hello( ) {
  document.write("hello!");
}

 


https://www.geeksforgeeks.org/javascript-anonymous-functions/

https://velog.io/@blackb0x/%EC%9D%B5%EB%AA%85%ED%95%A8%EC%88%98Anonymous-function

λ°˜μ‘ν˜•