whatisthis?

javaScript. (3) ํ•จ์ˆ˜(Function) ๋ณธ๋ฌธ

WEB STUDY/JAVASCRIPT

javaScript. (3) ํ•จ์ˆ˜(Function)

thisisyjin 2022. 1. 17. 12:57

1. ํ•จ์ˆ˜(Function)

 

๐Ÿ“Œ ํ•จ์ˆ˜์˜ ์ƒ์„ฑ

 

๋ฐฉ๋ฒ• 1 / ํ•จ์ˆ˜ ์„ ์–ธ (Declaration)

function addOne(x) {
   var y = x + 1;
   return y;
}

 

๋ฐฉ๋ฒ• 2 / ํ•จ์ˆ˜ ํ‘œํ˜„์‹ (Expression)

let addOne = function(x){      // ๋ณ€์ˆ˜ ์„ ์–ธ ํ›„ ํ•จ์ˆ˜ ๋Œ€์ž…
   var y = x + 1;
   return y;
};

 

์—ฌ๊ธฐ์„œ addOne์€ ํ•จ์ˆ˜์˜ ์ด๋ฆ„(=๋ณ€์ˆ˜์˜ ์ด๋ฆ„)์ด๊ณ ,

x๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๋„ฃ๊ณ ์‹ถ์€ ๊ฐ’์„ ๋„ฃ๋Š” ๊ณณ์ด๋‹ค.

๋”ฐ๋ผ์„œ, x๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜(parameter)๋ผ๊ณ  ํ•œ๋‹ค.

 

 

return์€ ํ•ด๋‹น ๊ฐ’์„ ํ•จ์ˆ˜ ๋ฐ”๊นฅ์œผ๋กœ ๋‚ด๋ณด๋‚ด๊ณ , ํ•จ์ˆ˜๋ฅผ ์ข…๋ฃŒํ•˜๋ผ๋Š” ์˜๋ฏธ์ด๋‹ค. (= ๋ฐ˜ํ™˜)

 

โ—โ— ์ฃผ์˜ - return์˜ ์œ„์น˜

 

 

 

์œ„ ๋‘ ๋ฐฉ์‹์˜ ์ฐจ์ด ์ค‘ ํ•˜๋‚˜๋Š” ํ˜ธ์ด์ŠคํŒ…(hoisting)์ด๋ผ๋Š” ํ˜„์ƒ์ธ๋ฐ,

ํ•ด๋‹น ๋‚ด์šฉ์€ ์•„๋ž˜ ํฌ์ŠคํŒ…์— ์ •๋ฆฌํ•ด๋‘์—ˆ๋‹ค.

 

 

javaScript. ํ˜ธ์ด์ŠคํŒ…(Hoisting)

javaScript. ์‹คํ–‰ ์ปจํ…์ŠคํŠธ (Execution Context) ์‹คํ–‰ ์ปจํ…์ŠคํŠธ (Execution Context) ์‹คํ–‰ ์ปจํ…์ŠคํŠธ(Execution Context)๋Š” scope, hoisting, this, function, closure ๋“ฑ์˜ ๋™์ž‘์›๋ฆฌ๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ..

mywebproject.tistory.com

 

 

๋˜ ๋‹ค๋ฅธ ์ฐจ์ด๋Š” ์ค‘๊ด„ํ˜ธ(๋ธ”๋ก) ๋์— ์„ธ๋ฏธ์ฝœ๋ก (;)์ด ๋ถ™๋Š”๋‹ค๋Š” ์ ์ด๋‹ค.

ํ•จ์ˆ˜ ์„ ์–ธ์œผ๋กœ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค ๋•Œ์—๋Š” ๋์— ์„ธ๋ฏธ์ฝœ๋ก ์„ ๋ถ™์ด์ง€ ์•Š๋Š”๋‹ค.

 

 

 

 


 

๐Ÿ“Œ ํ•จ์ˆ˜์˜ ์‹คํ–‰

 

์œ„์™€ ๊ฐ™์ด ์ƒ์„ฑํ•œ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š”

ํ•จ์ˆ˜์˜ ์ด๋ฆ„์—๋‹ค ์†Œ๊ด„ํ˜ธ()๋ฅผ ๋ถ™์ด๊ณ ,

๊ด„ํ˜ธ ์•ˆ์—๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜์— ์ƒ์‘ํ•˜๋Š” ์ธ์ž(argument)๋ฅผ ๋„ฃ์–ด์ค€๋‹ค.

 

>> ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ

 

 

๋ณ€์ˆ˜์— ์ €์žฅํ•ด์„œ return๊ฐ’์„ ๋ฐ›์„ ์ˆ˜๋„ ์žˆ๊ณ ,

๊ทธ๋ƒฅ ๋‹จ์ˆœํžˆ ํ˜ธ์ถœ๋งŒ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

(๋ณดํ†ต์€ ๋ณ€์ˆ˜์— ์ €์žฅํ•˜์—ฌ ์‚ฌ์šฉ)

 

 

(์ƒ) ํ˜ธ์ถœ๋งŒ / (ํ•˜) ํ˜ธ์ถœํ•˜์—ฌ ๋ณ€์ˆ˜์— ์ €์žฅ

์šฐ๋ฆฌ๊ฐ€ ์†Œ๊ด„ํ˜ธ ์•ˆ์— ์ธ์ž(argument)๋กœ 1์„ ๋„ฃ์—ˆ์œผ๋ฏ€๋กœ

3์ด ๋งค๊ฐœ๋ณ€์ˆ˜(parameter) x๋กœ ์ „๋‹ฌ๋˜๊ณ , addOne ํ•จ์ˆ˜ ๋‚ด๋ถ€์˜ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋œ๋‹ค.

 

 

function(parameter) {   } ํ•จ์ˆ˜ ์„ ์–ธ์‹œ ๊ด„ํ˜ธ ์•ˆ์˜ ๊ฐ’
function(argument) ํ•จ์ˆ˜ ํ˜ธ์ถœ์‹œ ๊ด„ํ˜ธ ์•ˆ์˜ ๊ฐ’

 

 

๋งŒ์•ฝ, ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ๋‘๊ฐœ๊ฐ€ ์žˆ๋‹ค๋ฉด ํ˜ธ์ถœ ์‹œ ์ธ์ž๋ฅผ ๋‘๊ฐœ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค.

์˜ˆ>

const addNumbers = function(x, y) {
   return x + y;
}

addNumbers(12, 5);    // 17

 

 

___

 

 

but. ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ๋งŽ์•„์ง€๋ฉด ์‚ฌ์šฉ์‹œ ํ—ท๊ฐˆ๋ฆด ์ˆ˜ ์žˆ๋‹ค.

>> ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ๋งŽ์•„์งˆ ๊ฒƒ ๊ฐ™์œผ๋ฉด ๊ฐ์ฒด๋ฅผ ์ฃผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

 

const addAll = function(object) {
   return object.a + object.b + object.c + object.d;
};

addAll({a: 1, b: 3, c: 4, d: 6});     // 14

์ด๋ ‡๊ฒŒ ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•˜๋ฉด,

๋งค๊ฐœ๋ณ€์ˆ˜๋„ ํ•˜๋‚˜์ด๊ณ , ์ธ์ž(argument)๋„ ํ•˜๋‚˜๋กœ ๊น”๋”ํ•˜๊ฒŒ ๋œ๋‹ค.

 

addAllํ•จ์ˆ˜์— ์ธ์ž๋กœ ๋„ฃ์€ ๊ฐ์ฒด( { } ์•ˆ์˜ ๊ฐ’๋“ค )๊ฐ€ object๋ผ๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌ๋˜์–ด

ํ•จ์ˆ˜์˜ ์ฝ”๋“œ๋Œ€๋กœ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์ด๋‹ค.

 

 

+) ์ถ”๊ฐ€๋กœ, ํ•จ์ˆ˜์˜ ์ธ์ž๋กœ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ด๋„ ๋œ๋‹ค.

const addOne = function(x) {
   return(x + 1);
}

const multiply = function(x, y) {
   return(x * y);
}   

const addMultiply =  multiply(addOne(2), addOne(4));    // 15

 

 

 

___

 

 

 

โ—  return์„ ํ•˜์ง€ ์•Š๋Š” ํ•จ์ˆ˜

 

- return์ด ์—†๋Š” ํ•จ์ˆ˜๋Š” ์ž๋™์œผ๋กœ undefined๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

- console.log๋‚˜ alert ๋“ฑ์ด ์ถœ๋ ฅ๋˜๋Š”๊ฒƒ์€ return์— ์˜ํ•œ ๊ฒƒ์ด ์•„๋‹ˆ๋ฏ€๋กœ ๊ด€๋ จ X.

 

 

>> return ๊ฐ’์„ ์ž…๋ ฅํ•˜์ง€ ์•Š์œผ๋ฉด ์ž๋™์œผ๋กœ return undefined; ๊ฐ€ ๋งˆ์ง€๋ง‰ ์ฝ”๋“œ๋กœ ๋™์ž‘!

 

 

 

 

 

___

โ—โ— return์˜ ์œ„์น˜

 

- return ์ดํ›„์—๋Š” ํ•จ์ˆ˜๊ฐ€ ์ข…๋ฃŒ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์‹คํ–‰๋˜์ง€ ์•Š์Œ.

> return ๋’ค์— ์ฝ”๋“œ๋ฅผ ์ ๋Š” ์‹ค์ˆ˜๋ฅผ ํ•˜์ง€ ๋ง์ž.

 

 


 

2. ๋ฉ”์†Œ๋“œ (method) + ๊ทธ ์™ธ

 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ๊ฐ์ฒด๋‚˜ ๋ฐฐ์—ด์˜ ๊ฐ’(value)์œผ๋กœ ํ•จ์ˆ˜๊ฐ€ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.

>> ํ•จ์ˆ˜๋„ ํ•˜๋‚˜์˜ ๊ฐ’์ด๊ธฐ ๋•Œ๋ฌธ.

 

 

const user = {
   name : 'yjin',
   age : 23,
   sayHello : function() {
   	  console.log('Hello ' + this.name);    // ์—ฌ๊ธฐ์„œ this๋Š” ๊ฐ์ฒด ์ž์‹ ์„ ์˜๋ฏธ.
    }
}

์‹คํ–‰ ๊ฒฐ๊ณผ

 

๊ฐ์ฒด์—์„œ ์†์„ฑ(property)์˜ ๊ฐ’์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋ฉ”์†Œ๋“œ(Method) ๋ผ๊ณ  ํ•œ๋‹ค.

 

>> ์ถ”ํ›„์— this์— ๋Œ€ํ•ด ์ž์„ธํžˆ ํฌ์ŠคํŒ…ํ•˜๋„๋ก ํ•˜๊ฒ ๋‹ค.

 

 

 

 

 

** ํ•จ์ˆ˜ ์‹ฌํ™” ver.

const mother = function(func) {
  func();
};
const children = function() {
  alert('์•ˆ๋…•ํ•˜์„ธ์š”');
};
mother(children); // '์•ˆ๋…•ํ•˜์„ธ์š”'

 

์œ„ ์˜ˆ์ œ์—์„œ, mother์ด๋ผ๋Š” ํ•จ์ˆ˜๋Š”

๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ฐ›์•„ ๊ทธ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๋„๋ก ๋˜์–ด์žˆ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ , childeren์ด๋ผ๋Š” ํ•จ์ˆ˜๋Š” '์•ˆ๋…•ํ•˜์„ธ์š”'๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

mother์˜ ์ธ์ž(argument)๋กœ children์ด ๋“ค์–ด๊ฐ”๊ธฐ ๋•Œ๋ฌธ์—

๋งค๊ฐœ๋ณ€์ˆ˜ func์— childern์ด๋ผ๋Š” ๊ฐ’์ด ์ „๋‹ฌ๋œ๋‹ค.

๋”ฐ๋ผ์„œ, mother ํ•จ์ˆ˜์˜ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ

 

children()์ด ์‹คํ–‰ -> children ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋จ.

 

 

>> ํ•จ์ˆ˜๊ฐ€ ์ธ์ž๊ฐ’(argument)๊ณผ ๋งค๊ฐœ๋ณ€์ˆ˜(parameter)๋กœ ํ™œ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค!

 

 

์œ„์™€ ๊ฐ™์ด ๊ฐ’(value)์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ 1๊ธ‰ ํ•จ์ˆ˜๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

 

 

 


REFERENCE

https://www.zerocho.com/category/JavaScript/post/572dcbbd2115c895b0f248fd

 

(JavaScript) ํ•จ์ˆ˜(Function)

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๊ฝƒ์€ ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋ชจ๋“  ๊ฒƒ์„ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ•จ์ˆ˜์˜ ๊ธฐ๋ณธ๋ถ€ํ„ฐ ํ™•์‹คํžˆ ์ตํ˜€ ๋†“๋Š” ๊ฒŒ ์ข‹๊ฒ ์ฃ ? ํ•จ์ˆ˜(Function) ํ•จ์ˆ˜๋ž€ ๋ญ˜๊นŒ์š”? ํ•™๊ต ์ˆ˜ํ•™์‹œ๊ฐ„์—

www.zerocho.com

์ด ํฌ์ŠคํŒ…์€ zerocho๋‹˜์˜ javascript ๊ฐ•์˜์™€ ์ฑ…์„ ๋ณด๊ณ  ์ž‘์„ฑํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค.

๊ณต๋ถ€+๊ธฐ๋ก ์šฉ์œผ๋กœ ์ž‘์„ฑํ•œ ๊ฒƒ์ด๋ฉฐ, ์ž์„ธํ•œ ๊ฒƒ์€ ์œ„ ํฌ์ŠคํŒ…์„ ์ฐธ๊ณ ํ•˜์„ธ์š”!