๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • What would life be If we had no courage to attemp anything?
Language/JavaScript

JavaScript - ํ•จ์ˆ˜(function)

by DevIseo 2022. 4. 26.

๐Ÿคํ•จ์ˆ˜ - ์ธํ’‹๊ฐ’์— ์–ด๋– ํ•œ ์กฐ์ž‘์„ ๊ฐ€ํ•ด ์•„์›ƒํ’‹ ๊ฐ’์„ ๋ฝ‘๋Š” ๊ฒƒ

|ํ•จ์ˆ˜ in JavaScript

  • ์ฐธ์กฐ ํƒ€์ž… ์ค‘ ํ•˜๋‚˜๋กœ์จ function ํƒ€์ž…์— ์†ํ•จ
  • JavaScript์—์„œ ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์ฃผ๋กœ 2๊ฐ€์ง€๋กœ ๊ตฌ๋ถ„
    • ํ•จ์ˆ˜ ์„ ์–ธ์‹ (function declaration)
    • ํ•จ์ˆ˜ ํ‘œํ˜„์‹ (function expression)

|ํ•จ์ˆ˜ ์„ ์–ธ์‹

  • ํ•จ์ˆ˜์˜ ์ด๋ฆ„๊ณผ ํ•จ๊ป˜ ์ •์˜ํ•˜๋Š” ๋ฐฉ์‹
  • 3๊ฐ€์ง€ ๋ถ€๋ถ„์œผ๋กœ ๊ตฌ์„ฑ
    • ํ•จ์ˆ˜์˜ ์ด๋ฆ„(name)
    • ๋งค๊ฐœ๋ณ€์ˆ˜ (args)
    • ๋ชธํ†ต(์ค‘๊ด„ํ˜ธ ๋‚ด๋ถ€)
function name(args) {
	//do something
}

function add(num1,num2){
	return num1+num2
}
add(1,2)

|ํ•จ์ˆ˜ ํ‘œํ˜„์‹

const name = function (args){
	//do something
}

const add = function (num1,num2){
	return num1+num2
}
add(1,2)
  • ํ•จ์ˆ˜๋ฅผ ํ‘œํ˜„์‹* ๋‚ด์—์„œ ์ •์˜ํ•˜๋Š” ๋ฐฉ์‹
    • (์ฐธ๊ณ ) ํ‘œํ˜„์‹*: ์–ด๋–ค ํ•˜๋‚˜์˜ ๊ฐ’์œผ๋กœ ๊ฒฐ์ •๋˜๋Š” ์ฝ”๋“œ์˜ ๋‹จ์œ„
  • ํ•จ์ˆ˜์˜ ์ด๋ฆ„์„ ์ƒ๋žตํ•˜๊ณ  ์ต๋ช… ํ•จ์ˆ˜*๋กœ ์ •์˜ ๊ฐ€๋Šฅ
    • ์ต๋ช… ํ•จ์ˆ˜*(anonymous function): ์ด๋ฆ„์ด ์—†๋Š” ํ•จ์ˆ˜
    • ์ต๋ช… ํ•จ์ˆ˜๋Š” ํ•จ์ˆ˜ ํ‘œํ˜„์‹์—์„œ๋งŒ ๊ฐ€๋Šฅ
  • 3๊ฐ€์ง€ ๋ถ€๋ถ„์œผ๋กœ ๊ตฌ์„ฑ
    • ํ•จ์ˆ˜์˜ ์ด๋ฆ„(์ƒ๋žต ๊ฐ€๋Šฅ)
    • ๋งค๊ฐœ๋ณ€์ˆ˜(args)
    • ๋ชธํ†ต(์ค‘๊ด„ํ˜ธ ๋‚ด๋ถ€)

|๊ธฐ๋ณธ์ธ์ž

  • ์ธ์ž ์ž‘์„ฑ ์‹œ โ€˜=โ€™ ๋ฌธ์ž ๋’ค ๊ธฐ๋ณธ ์ธ์ž ์„ ์–ธ ๊ฐ€๋Šฅ
const greeting = function (name='Anonymous') {
	return `Hi ${name}`
}
greeting() ///Hi Anonymous

|๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์ธ์ž์˜ ๊ฐœ์ˆ˜ ๋ถˆ์ผ์น˜ ํ—ˆ์šฉ

  • ๋งค๊ฐœ๋ณ€์ˆ˜๋ณด๋‹ค ์ธ์ž์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋งŽ๊ฑฐ๋‚˜ ์ ๊ฑฐ๋‚˜ ๋ชจ๋‘ ํ—ˆ์šฉ๋จ

|Rest Parameter

  • rest parameter(โ€ฆ)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•จ์ˆ˜๊ฐ€ ์ •ํ•ด์ง€์ง€ ์•Š์€ ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ฐฐ์—ด๋กœ ๋ฐ›์Œ (python ์˜ *args ์™€ ์œ ์‚ฌ)
    • ๋งŒ์•ฝ rest operator๋กœ ์ฒ˜๋ฆฌํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜์— ์ธ์ž๊ฐ€ ๋„˜์–ด์˜ค์ง€ ์•Š์„ ๊ฒฝ์šฐ์—๋Š”, ๋นˆ ๋ฐฐ์—ด๋กœ ์ฒ˜๋ฆฌ
    const restOpr = function (arg1, arg2, ...restArgs) {
     return [arg1, arg2, restArgs]
    }
    restArgs(1, 2, 3, 4, 5) // [1, 2, [3, 4, 5]]
    restArgs(1, 2) // [1, 2, []]
    

|Spread operator

  • spread operator(โ€ฆ)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐฐ์—ด ์ธ์ž๋ฅผ ์ „๊ฐœํ•˜์—ฌ ์ „๋‹ฌ ๊ฐ€๋Šฅ.
const spreadOpr = function (arg1, arg2, arg3) {
 return arg1 + arg2 + arg3
}
const numbers = [1, 2, 3]
spreadOpr(...numbers) // 6

๐Ÿคํ•จ์ˆ˜ ์„ ์–ธ์‹ vs ํ•จ์ˆ˜ ํ‘œํ˜„์‹

 

  ํ•จ์ˆ˜ ์„ ์–ธ์‹(declaration)  ํ•จ์ˆ˜ ํ‘œํ˜„์‹(expression)
๊ณตํ†ต์  ๋ฐ์ดํ„ฐํƒ€์ž…,ํ•จ์ˆ˜ ๊ตฌ์„ฑ์š”์†Œ(์ด๋ฆ„, ๋งค๊ฐœ๋ณ€์ˆ˜, ๋ชธํ†ต)
์ฐจ์ด์  ์ต๋ช… ํ•จ์ˆ˜ ๋ถˆ๊ฐ€๋Šฅ ์ต๋ช… ํ•จ์ˆ˜ ๊ฐ€๋Šฅ
๋น„๊ณ    Airbnb style guide ๊ถŒ์žฅ ๋ฐฉ์‹

|ํ•จ์ˆ˜์˜ ํƒ€์ž…

  • function์œผ๋กœ ๋™์ผํ•จ!

|ํ˜ธ์ด์ŠคํŒ…(hoisting) - ํ•จ์ˆ˜ ์„ ์–ธ์‹

  • ํ•จ์ˆ˜ ์„ ์–ธ์‹์œผ๋กœ ์„ ์–ธํ•œ ํ•จ์ˆ˜๋Š” var๋กœ ์ •์˜ํ•œ ๋ณ€์ˆ˜์ฒ˜๋Ÿผ hoisting ๋ฐœ์ƒ
  • ํ•จ์ˆ˜ ํ˜ธ์ถœ ์ดํ›„์— ์„ ์–ธ ํ•ด๋„ ๋™์ž‘
add(2,7) //9
function add(num1,num2){
	return num1+num2
}

|ํ˜ธ์ด์ŠคํŒ…(hoisting) - ํ•จ์ˆ˜ ํ‘œํ˜„์‹

  • ๋ฐ˜๋ฉด ํ•จ์ˆ˜ ํ‘œํ˜„์‹์œผ๋กœ ์„ ์–ธํ•œ ํ•จ์ˆ˜๋Š” ํ•จ์ˆ˜ ์ •์˜ ์ „์— ํ˜ธ์ถœ ์‹œ ์—๋Ÿฌ ๋ฐœ์ƒ
  • ํ•จ์ˆ˜ ํ‘œํ˜„์‹์œผ๋กœ ์ •์˜๋œ ํ•จ์ˆ˜๋Š” ๋ณ€์ˆ˜๋กœ ํ‰๊ฐ€๋˜์–ด ๋ณ€์ˆ˜์˜ scope ๊ทœ์น™์„ ๋”ฐ๋ฆ„
sub(7,2)//Uncaught ReferenceError: Cannot access 'sub' before initialization

const sub = function (num1,num2) {
	return num1-num2
}
  • ํ•จ์ˆ˜ ํ‘œํ˜„์‹์„ var ํ‚ค์›Œ๋“œ๋กœ ์ž‘์„ฑํ•œ ๊ฒฝ์šฐ, ๋ณ€์ˆ˜๊ฐ€ ์„ ์–ธ ์ „ undefined ๋กœ ์ดˆ๊ธฐํ™” ๋˜์–ด ๋‹ค๋ฅธ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒ
console.log(sub)//undefined
sub(7,2)//Uncaught TypeError: sub is not a function

var sub = function(num1,num2){
	return num1-num2
}

๐ŸคArrow Function

|ํ™”์‚ดํ‘œ ํ•จ์ˆ˜ (Arrow Function)

  • ํ•จ์ˆ˜๋ฅผ ๋น„๊ต์  ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ๋ฒ•
  • function ํ‚ค์›Œ๋“œ ์ƒ๋žต ๊ฐ€๋Šฅ
  • ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ๋‹จ ํ•˜๋‚˜ ๋ฟ์ด๋ผ๋ฉด, โ€˜( )โ€™ ๋„ ์ƒ๋žต ๊ฐ€๋Šฅ
  • ํ•จ์ˆ˜ ๋ชธํ†ต์ด ํ‘œํ˜„์‹ ํ•˜๋‚˜๋ผ๋ฉด โ€˜{ }โ€™๊ณผ return๋„ ์ƒ๋žต ๊ฐ€๋Šฅ
  • ๊ธฐ์กด function ํ‚ค์›Œ๋“œ ์‚ฌ์šฉ ๋ฐฉ์‹๊ณผ์˜ ์ฐจ์ด์ ์€ ํ›„๋ฐ˜๋ถ€ this ํ‚ค์›Œ๋“œ๋ฅผ ํ•™์Šตํ•˜๊ณ  ๋‹ค์‹œ ์„ค๋ช…
const arrow1 = function (name) { 
 return `hello, ${name}`
}
// 1. function ํ‚ค์›Œ๋“œ ์‚ญ์ œ
const arrow2 = (name) => { return `hello, ${name}` }
// 2. ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ 1๊ฐœ์ผ ๊ฒฝ์šฐ์—๋งŒ ( ) ์ƒ๋žต ๊ฐ€๋Šฅ
const arrow3 = name => { return `hello, ${name}` }
// 3. ํ•จ์ˆ˜ ๋ฐ”๋””๊ฐ€ return์„ ํฌํ•จํ•œ ํ‘œํ˜„์‹ 1๊ฐœ์ผ ๊ฒฝ์šฐ์— { } & return ์‚ญ์ œ
๊ฐ€๋Šฅ
const arrow4 = name => `hello, ${name}`

'Language > JavaScript' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

JavaScript - ๋ฐฐ์—ด(Arrays)  (0) 2022.04.27
JavaScript - ๋ฌธ์ž์—ด(String)  (0) 2022.04.26
JavaScript - ์กฐ๊ฑด๋ฌธ  (0) 2022.04.26
JavaScript - ๋ฐ์ดํ„ฐ ํƒ€์ž…, ์—ฐ์‚ฐ์ž  (0) 2022.04.26
JavaScript - intro, ๋ณ€์ˆ˜  (0) 2022.04.26

๋Œ“๊ธ€