Function - wooyeonhui/Yeonny GitHub Wiki

* ํ•จ์ˆ˜๋ž€ ์–ด๋–ค ํŠน์ • ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์ผ๋ จ์˜ ๊ตฌ๋ฌธ๋“ค์„ ๊ทธ๋ฃนํ™”ํ•˜๊ธฐ ์œ„ํ•œ ๊ฐœ๋…์ด๋‹ค. ๋งŒ์ผ ์Šคํฌ๋ฆฝํŠธ์˜ ๋‹ค๋ฅธ ๋ถ€๋ถ„์—์„œ๋„ ๋™์ผํ•œ ์ž‘์—…์„ ๋ฐ˜๋ณต์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•œ๋‹ค๋ฉด(๋™์ผํ•œ ๊ตฌ๋ฌธ์„ ๊ณ„์†ํ•ด์„œ ๋ฐ˜๋ณต ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ ์ด ์•„๋‹ˆ๋ผ) ๋ฏธ๋ฆฌ ์ž‘์„ฑ๋œ ํ•จ์ˆ˜๋ฅผ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.(์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ)
* ํ•จ์ˆ˜์˜ ์ผ๋ฐ˜์  ๊ธฐ๋Šฅ์€ ํŠน์ • ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š”๊ตฌ๋ฌธ๋“ค์˜ ์ง‘ํ•ฉ์„ ์ •์˜ํ•˜๊ณ  ํ•„์š”์‹œ์— ํ˜ธ์ถœํ•˜์—ฌ ํ•„์š”ํ•œ ๊ฐ’ ๋˜๋Š” ์ˆ˜ํ–‰ ๊ฒฐ๊ณผ๋ฅผ ์–ป๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Ÿฌํ•œ ์ผ๋ฐ˜์  ๊ธฐ๋Šฅ(์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ) ์ด์™ธ์— ๊ฐ์ฒด ์ƒ์„ฑ,๊ฐ์ฒด์˜ ํ–‰์œ„ ์ง€์ •(๋ฉ”์†Œ๋“œ), ์ •๋ณด์˜ ๊ตฌ์„ฑ ๋ฐ ์€๋‹‰,ํด๋กœ์ €,๋ชจ๋“ˆํ™” ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•จ์ˆ˜๋Š” ๊ตฌ๋ฌธ(statement)์˜ ์ง‘ํ•ฉ์œผ๋กœ ๋ชจ๋“ˆํ™”์˜ ๊ทผ๊ฐ„์ด ๋œ๋‹ค.์ผ๋ฐ˜์ ์œผ๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ์ˆ ์€ ์š”๊ตฌ์‚ฌํ•ญ์˜ ์ง‘ํ•ฉ์„ ์ž๋ฃŒ๊ตฌ์กฐ์™€ ํ•จ์ˆ˜์˜ ์ง‘ํ•ฉ์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
* ํ•จ์ˆ˜๋„ ๊ฐ์ฒด์ด๋‹ค. ๋‹ค๋ฅธ ๊ฐ์ฒด์™€ ๊ตฌ๋ถ„๋  ์ˆ˜ ์žˆ๋Š” ํŠน์ง•์€ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.
* ํ•จ์ˆ˜๋„ ๊ฐ์ฒด(์ผ๊ธ‰ ๊ฐ์ฒด First-class object)์ด๋ฏ€๋กœ ๋‹ค๋ฅธ ๊ฐ’๋“ค ์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰ ๋ณ€์ˆ˜๋‚˜ ๊ฐ์ฒด,๋ฐฐ์—ด ๋“ฑ์— ์ €์žฅ๋  ์ˆ˜ ์žˆ๊ณ  ๋‹ค๋ฅธ ํ•จ์ˆ˜์— ์ „๋‹ฌ๋˜๋Š” ์ธ์ˆ˜๋กœ๋„ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜๊ฐ’์ด ๋  ์ˆ˜๋„ ์žˆ๋‹ค.

== ํ•จ์ˆ˜์˜ ์ •์˜ยถ โ†‘

ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•˜๋Š” ๋ฐฉ์‹์€ 3๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

* ํ•จ์ˆ˜์„ ์–ธ์‹(Function declaration)
* ํ•จ์ˆ˜ํ‘œํ˜„์‹(FUnction expression)
* Function() ์ƒ์„ฑ์ž ํ•จ์ˆ˜

=== ํ•จ์ˆ˜ ์„ ์–ธ์‹(Function declaration)ยถ โ†‘

ํ•จ์ˆ˜์„ ์–ธ์‹์„ ์‚ฌ์šฉํ•œ ํ•จ์ˆ˜ ์ •์˜๋Š” function ํ‚ค์›Œ๋“œ์™€ ์ดํ•˜์˜ ๋‚ด์šฉ์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

* ํ•จ์ˆ˜๋ช…

ํ•จ์ˆ˜์„ ์–ธ์‹์˜ ๊ฒฝ์šฐ, ํ•จ์ˆ˜๋ช…์€ ์ƒ๋žตํ•  ์ˆ˜ ์—†๋‹ค. ํ•จ์ˆ˜๋ช…์€ ํ•จ์ˆ˜ ๋ชธ์ฒด์—์„œ ์ž์‹ ์„ ์žฌ๊ท€์ (recursive)ํ˜ธ์ถœํ•˜๊ฑฐ๋‚˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋””๋ฒ„๊ฑฐ๊ฐ€ ํ•ด๋‹น ํ•จ์ˆ˜๋ฅผ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋Š” ์‹์ก€์ž์˜ ์—ญํ• ์„ ํ•œ๋‹ค.

* ๋งค๊ฐœ๋ณ€์ˆ˜ ๋ชฉ๋ก

0๊ฐœ ์ด์ƒ์˜ ๋ชฉ๋ก์œผ๋กœ ๊ด„ํ˜ธ๋กœ ๊ฐ์‹ธ๊ณ  ์ฝค๋งˆ๋กœ ๋ถ„๋ฆฌํ•œ๋‹ค. ๋‹ค๋ฅธ ์–ธ์–ด์™€์˜ ์ฐจ์ด์ ์€ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์ž๋ฃŒํ˜•์„ ๊ธฐ์ˆ ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์ด ๋•Œ๋ฌธ์— ํ•จ์ˆ˜ ๋ชธ์ฒด ๋‚ด์—์„œ ๋งค๊ฐœ๋ฑ์ˆ˜์˜ ์ž๋ฃŒํ˜• ์ฒดํฌ๊ฐ€ ํ•„์š”ํ•  ์ˆ˜ ์žˆ๋‹ค.

* ํ•จ์ˆ˜ ๋ชธ์ฒด

์‹ค์ œ ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜์—ˆ์„ ๋–„ ์‹คํ–‰๋˜๋Š” ๊ตฌ๋ฌธ๋“ค์˜ ์ง‘ํ•ฉ์ด๋‹ค.์ค‘๊ด„ํ˜ธ({})๋กœ ๊ตฌ๋ฌธ๋“ค์„ ๊ฐ์‹ธ๊ณ  return ๋ฌธ์œผ๋กœ ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ๋ฐ˜ํ™˜๊ฐ’(return value)๋ผ ํ•œ๋‹ค.

function square(number){

return number * number;

}

=== ํ•จ์ˆ˜ ํ‘œํ˜„์‹(Function expression)ยถ โ†‘

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํ•จ์ˆ˜๋Š” ์ผ๊ธ‰ ๊ฐ์ฒด์ด๋ฏ€๋กœ ์•„๋ž˜์™€ ๊ฐ™์€ ํŠน์ง•์ด ์žˆ๋‹ค.

* 1. ๋ฌด๋ช…์˜ ๋ฆฌํ„ฐ๋Ÿด๋กœ ํ‘œํ˜„์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
* 2. ๋ณ€์ˆ˜๋‚˜ ์ž๋ฃŒ ๊ตฌ์กฐ(๊ฐ์ฒด,๋ฐฐ์—ด...)์— ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.
* 3. ํ•จ์ˆ˜์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.
* 4. ๋ฐ˜ํ™˜๊ฐ’(return value)์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ•จ์ˆ˜์˜ ์ผ๊ธ‰๊ฐ์ฒด ํŠน์„ฑ์„ ์ด์šฉํ•˜์—ฌ ํ•จ์ˆ˜ ๋ฆฌํ„ฐ๋Ÿด ๋ฐฉ์‹์œผ๋กœ ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•˜๊ณ  ๋ณ€์ˆ˜์— ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์„ ํ•จ์ˆ˜ํ‘œํ˜„์‹(Function expression)์ด๋ผ ํ•œ๋‹ค. ํ•จ์ˆ˜์„ ์–ธ์‹์œผ๋กœ ์ •์˜ํ•œ ํ•จ์ˆ˜ square()๋ฅผ ํ•จ์ˆ˜ํ‘œํ˜„์‹์œผ๋กœ ์ •์˜ํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

var square = function(number) {

return number * number;

};

ํ•จ์ˆ˜ํ‘œํ˜„์‹์œผ๋กœ ์ •์˜ํ•œ ํ•จ์ˆ˜๋Š” ํ•จ์ˆ˜๋ช…์„ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ๋‹ค.์ด๋Ÿฌํ•œ ํ•จ์ˆ˜๋ฅผ ์ต๋ช… ํ•จ์ˆ˜(anonymous function)์ด๋ผ ํ•œ๋‹ค.ํ•จ์ˆ˜ํ‘œํ˜„์‹์—์„œ๋Š” ํ•จ์ˆ˜๋ช…์„ ์ƒ๋žตํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด๋‹ค.

// ๊ธฐ๋ช… ํ•จ์ˆ˜ํ‘œํ˜„์‹(named function expression) var foo = function multiply(a, b) {

return a * b;

}; // ์ต๋ช… ํ•จ์ˆ˜ํ‘œํ˜„์‹(anonymous function expression) var bar = function(a, b) {

return a * b;

};

console.log(foo(10, 5)); // 50 console.log(multiply(10, 5)); // Uncaught ReferenceError: multiply is not defined

ํ•จ์ˆ˜๋Š” ์ผ๊ธ‰๊ฐ์ฒด์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ณ€์ˆ˜์— ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์ด ๋ณ€์ˆ˜๋Š” ํ•จ์ˆ˜๋ช…์ด ์•„๋‹ˆ๋ผ ํ• ๋‹น๋œ ํ•จ์ˆ˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ฐธ์กฐ๊ฐ’์„ ์ €์žฅํ•˜๊ฒŒ ๋œ๋‹ค. ํ•จ์ˆ˜ ํ˜ธ์ถœ์‹œ ์ด ๋ณ€์ˆ˜๊ฐ€ ํ•จ์ˆ˜๋ช…์ฒ˜๋Ÿผ ์‚ฌ์šฉ๋œ๋‹ค.

var foo = function(a, b) {

return a * b;

};

var bar = foo;

console.log(foo(10, 10)); // 100 console.log(bar(10, 10)); // 100

๋ณ€์ˆ˜ bar์™€ ๋ณ€์ˆ˜ foo๋Š” ๋™์ผํ•œ ์ต๋ช… ํ•จ์ˆ˜์˜ ์ฐธ์กฐ๊ฐ’์„ ๊ฐ–๋Š”๋‹ค.

ํ•จ์ˆ˜๊ฐ€ ํ• ๋‹น๋œ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ– ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ์•Š๊ณ  ๊ธฐ๋ช… ํ•จ์ˆ˜์˜ ํ•จ์ˆ˜๋ช…์„ ์‚ฌ์šฉํ•ด ํ˜ธ์ถœํ•˜๊ฒŒ ๋˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.์ด๋Š” ํ•จ์ˆ˜ ํ‘œํ˜„์‹์—์„œ ์‚ฌ์šฉํ•œ ํ•จ์ˆ˜๋ช…์€ ์™ธ๋ถ€ ์ฝ”๋“œ์—์„œ ์ ‘๊ทผ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.(์‚ฌ์‹ค์€ ํ•จ์ˆ˜์„ ์–ธ์‹์˜ ๊ฒฝ์šฐ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ด๋‹ค.) ํ•จ์ˆ˜ํ‘œํ˜„์‹๊ณผ ํ•จ์ˆ˜์„ ์–ธ์‹์—์„œ ์‚ฌ์šฉํ•œ ํ•จ์ˆ˜๋ช…์€ ํ•จ์ˆ˜ ๋ชธ์ฒด์—์„œ ์ž์‹ ์„ ์žฌ๊ท€์  ํ˜ธ์ถœํ•˜๊ฑฐ๋‚˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋””๋ฒ„๊ฑฐ๊ฐ€ ํ•ด๋‹น ํ•จ์ˆ˜๋ฅผ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋Š” ์‹๋ณ„์ž์˜ ์—ญํ• ์„ ํ•œ๋‹ค. ํ•จ์ˆ˜์„ ์–ธ์‹์œผ๋กœ ์ •์˜ํ•œ square()์˜ ๊ฒฝ์šฐ, ํ•จ์ˆ˜๋ช…์œผ๋กœ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์—ˆ๋Š”๋ฐ ์ด๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์— ์˜ํ•ด ์•„๋ž˜์™€ ๊ฐ™์€ ํ•จ์ˆ˜ ํ‘œํ˜„์‹์œผ๋กœ ํ˜•ํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

var square = function square(number) {

return number * number;

};

ํ•จ์ˆ˜๋ช…๊ณผ ํ•จ์ˆ˜ ์ฐธ์กฐ๊ฐ’์„ ๊ฐ€์ง„ ๋ณ€์ˆ˜๋ช…์ด ์ผ์น˜ํ•˜๋ฏ€๋กœ ํ•จ์ˆ˜๋ช…์œผ๋กœ ํ˜ธ์ถœ๋˜๋Š” ๋“ฏ ๋ณด์ด์ง€๋งŒ ์‚ฌ์‹ค์€ ๋ณ€์ˆ˜๋ช…์œผ๋กœ ํ˜ธ์ถœ๋œ ๊ฒƒ์ด๋‹ค.

ํ•จ์ˆ˜์„ ์–ธ์‹์œผ๋กœ ์ •์˜ํ•œ square()์˜ ๊ฒฝ์šฐ,ํ•จ์ˆ˜๋ช…์œผ๋กœ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์—ˆ๋Š”๋ฐ ์ด๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์— ์˜ํ•ด ์•„๋ž˜์™€ ๊ฐ™์€ ํ•จ์ˆ˜ํ‘œํ˜„์‹์œผ๋กœ ํ˜•๋Œ€๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

var square = function square(number) {

return number * number;

};

ํ•จ์ˆ˜๋ช…๊ณผ ํ•จ์ˆ˜ ์ฐธ์กฐ๊ฐ’์„ ๊ฐ€์ง„ ๋ณ€์ˆ˜๋ช…์ด ์ผ์น˜ํ•˜๋ฏ€๋กœ ํ•จ์ˆ˜๋ช…์œผ๋กœ ํ˜ธ์ถœ๋˜๋Š” ๋“ฏ ๋ณด์ด์ง€๋งŒ ์‚ฌ์‹ค์€ ๋ณ€์ˆ˜๋ช…์œผ๋กœ ํ˜ธ์ถœ๋œ ๊ฒƒ์ด๋‹ค.

๊ฒฐ๊ตญ ํ•จ์ˆ˜์„ ์–ธ์‹๋„ ํ•จ์ˆ˜ ํ‘œํ˜„์‹๊ณผ ๋™์ผํ•˜๊ฒŒ ํ•จ์ˆ˜ ๋ฆฌํ„ฐ๋Ÿด ๋ฐฉ์‹์œผ๋กœ ์ •์˜๋˜๋Š” ๊ฒƒ์ด๋‹ค.

Function() ์ƒ์„ฑ์ž ํ•จ์ˆ˜ยถ โ†‘

ํ•จ์ˆ˜ํ‘œํ˜„์‹์œผ๋กœ ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•  ๋•Œ ํ•จ์ˆ˜ ๋ฆฌํ„ฐ๋Ÿด ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค. ํ•จ์ˆ˜์„ ์–ธ์‹๋„ ๋‚ด๋ถ€์ ์œผ๋กœ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์ด ๊ธฐ๋ช… ํ•จ์ˆ˜ํ‘œํ˜„์‹์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋ฏ€์˜ค ๊ฒฐ๊ตญ ํ•จ์ˆ˜ ๋ฆฌํ„ฐ๋Ÿด๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค.

๋”ฐ๋ผ์„œ ํ•จ์ˆ˜์„ ์–ธ์‹๊ณผ ํ•จ์ˆ˜ํ‘œํ˜„์‹์€ ๋ชจ๋‘ ํ•จ์ˆ˜ ๋ฆฌํ„ฐ๋Ÿด ๋ฐฉ์‹์œผ๋กœ ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•˜๋Š”๋ฐ ์ด๊ฒƒ์€ ๊ฒฐ๊ตญ ๋‚ด์žฅ ํ•จ์ˆ˜ Function() ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋กœ ํ•จ์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์„ ๋‹จ์ˆœํ™”์‹œํ‚จ ๊ฒƒ์ด๋‹ค.

Function() ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋Š” Function.prototype.constructor ํ”„๋กœํผํ‹ฐ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค. Function() ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋กœ ํ•จ์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฌธ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

new Function(arg1, arg2, โ€ฆ argN, functionBody)

var square = new Function(โ€˜numberโ€™, โ€˜return number * numberโ€™); console.log(square(10)); // 100

Function() ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋กœ ํ•จ์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ์‹์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

ํ•จ์ˆ˜ ํ˜ธ์ด์ŠคํŒ…(Function Hoisting)ยถ โ†‘

3๊ฐ€์ง€์˜ ํ•จ์ˆ˜ ์ •์˜ ๋ฐฉ์‹์„ ์•Œ์•„๋ณด์•˜๋‹ค. ์ •์˜ ๋ฐฉ์‹์€ ๋‹ฌ๋ผ๋„ ๊ฒฐ๊ตญ Function() ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ํ•จ์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ๊นŒ์ง€ ํ™•์ธํ–ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ด 3๊ฐ€์ง€ ํ•จ์ˆ˜ ์ •์˜ ๋ฐฉ์‹์€ ๋™์ž‘ ๋ฐฉ์‹์— ์•ฝ๊ฐ„์˜ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.

ํ•จ์ˆ˜ ํ˜ธ์ด์ŠคํŒ…(Function Hoisting)ยถ โ†‘

3๊ฐ€์ง€ ํ•จ์ˆ˜ ์ •์˜ ๋ฐฉ์‹์„ ์•Œ์•„๋ณด์•˜๋‹ค. ์ •์˜ ๋ฐฉ์‹์€ ๋‹ฌ๋ผ๋„ ๊ฒฐ๊ตญ Function() ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ํ•จ์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ๊นŒ์ง€ ํ™•์ธํ•˜์˜€๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ด 3๊ฐ€์ง€ ํ•จ์ˆ˜ ์ •์˜ ๋ฐฉ์‹์€ ๋™์ž‘ ๋ฐฉ์‹์— ์•ฝ๊ฐ„์˜ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.

var res = square(5);

function square(number) {

return number * number;

}

์œ„ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด ํ•จ์ˆ˜์„ ์–ธ์‹์œผ๋กœ ํ•จ์ˆ˜๊ฐ€ ์ •์˜๋˜๊ธฐ ์ด์ „์— ํ•จ์ˆ˜ ํ˜ธ์ถœ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ํ•จ์ˆ˜ ์„ ์–ธ์˜ ์œ„์น˜์™€๋Š” ์ƒ๊ด€์—†์ด ์ฝ”๋“œ ๋‚ด ์–ด๋А ๊ณณ์—์„œ๋“ ์ง€ ํ˜ธ์ถœ์ด ๊ฐ€๋Šฅํ•œ๋ฐ ์ด๊ฒƒ์„ ํ•จ์ˆ˜ ํ˜ธ์ด์ŠคํŒ…(Function Hoisting)์ด๋ผ ํ•œ๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ES6์˜ let,const๋ฅผ ํฌํ•จํ•˜์—ฌ ๋ชจ๋“  ์„ ์–ธ(var,let,const,function,function*,class)์„ ํ˜ธ์ด์ŠคํŒ…(Hoisting)ํ•œ๋‹ค. ํ˜ธ์ด์ŠคํŒ…์ด๋ž€ var ์„ ์–ธ๋ฌธ์ด๋‚˜ function ์„ ์–ธ๋ฌธ ๋“ฑ์„ ํ•ด๋‹น Scope์˜ ๋งจ ์œ„๋กœ ์˜ฎ๊ธฐ๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค. ์ฆ‰ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์ „์— var ์„ ์–ธ๋ฌธ๊ณผ function ์„ ์–ธ๋ฌธ์„ ํ•ด๋‹น ์Šค์ฝ”ํ”„์˜ ๋งจ์œ„๋กœ ์˜ฎ๊ธด๋‹ค.

ํ•จ์ˆ˜์„ ์–ธ์‹์œผ๋กœ ์ •์˜๋œ ํ•จ์ˆ˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์ด ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋กœ๋”ฉ๋˜๋Š” ์‹œ์ ์— ๋ฐ”๋กœ ์ดˆ๊ธฐํ™”ํ•˜๊ณ  ์ด๋ฅผ VO(variable object)์— ์ €์žฅํ•œ๋‹ค.์ฆ‰,ํ•จ์ˆ˜ ์„ ์–ธ,์ดˆ๊ธฐํ™”,ํ• ๋‹น์ด ํ•œ๋ฒˆ์— ์ด๋ฃจ์–ด์ง„๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋–„๋ฌธ์— ํ•จ์ˆ˜ ์„ ์–ธ์˜ ์œ„์น˜์™€๋Š” ์ƒ๊ด€์—†์ด ์†Œ์Šค ๋‚ด ์–ด๋А ๊ณณ์—์„œ๋“ ์ง€ ํ˜ธ์ถœ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

๋‹ค์Œ์€ ํ•จ์ˆ˜ํ‘œํ˜„์‹์œผ๋กœ ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•œ ๊ฒฝ์šฐ์ด๋‹ค.

var res = square(5); // TypeError: square is not a function

var square = function(number) {

return number * number;

}

ํ•จ์ˆ˜์„ ์–ธ์‹์˜ ๊ฒฝ์šฐ์™€๋Š” ๋‹ฌ๋ฆฌ TypeError๊ฐ€ ๋ฐœ์ƒํ•œ์˜€๋‹ค. ํ•จ์ˆ˜ํ‘œํ˜„์‹์˜ ๊ฒฝ์šฐ ํ•จ์ˆ˜ ํ˜ธ์ด์ŠคํŒ…์ด ์•„๋‹ˆ๋ผ ๋ณ€์ˆ˜ ํ˜ธ์ด์ŠคํŒ…์ด ๋ฐœ์ƒํ•œ๋‹ค.

> ๋ณ€์ˆ˜ ํ˜ธ์ด์ŠคํŒ…์€ ๋ณ€์ˆ˜ ์ƒ์„ฑ ๋ฐ ์ดˆ๊ธฐํ™”์™€ ํ• ๋‹น์ด ๋ถ„๋ฆฌ๋˜์–ด ์ง„ํ–‰๋œ๋‹ค. ํ˜ธ์ด์ŠคํŒ…๋œ ๋ณ€์ˆ˜๋Š” undefined๋กœ ์ดˆ๊ธฐํ™” ๋˜๊ณ  ์‹ค์ œ๊ฐ’์˜ ํ• ๋‹น์€ ํ• ๋‹น๋ฌธ์—์„œ ์ด๋ฃจ์–ด์ง„๋‹ค.

ํ•จ์ˆ˜ํ‘œํ˜„์‹์€ ํ•จ์ˆ˜์„ ์–ธ์‹๊ณ ํ•˜๋Š” ๋‹ฌ๋ฆฌ ์Šคํฌ๋ฆฝํŠธ ๋กœ๋”ฉ ์‹œ์ ์— ๋ณ€์ˆ˜ ๊ฐ์ฒด(VO)์— ํ•จ์ˆ˜๋ฅผ ํ• ๋‹นํ•˜์ง€ ์•Š๊ณ  runtime์— ํ•ด์„๋˜๊ณ  ์‹คํ–‰๋˜๋ฏ€๋กœ ์ด ๋‘๊ฐ€์ง€๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฒƒ์€ ์ค‘์š”ํ•˜๋‹ค.

JavaScript : The Good Parts์˜ ์ €์ž์ด๋ฉฐ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๊ถŒ์œ„์ž์ธ ๋”๊ธ€๋Ÿฌ์Šค ํฌ๋ฝํฌ๋“œ(Douglas Crockford)๋Š” ์ด์™€ ๊ฐ™์€ ๋ฌธ์ œ ๋•Œ๋ฌธ์— ํ•จ์ˆ˜ํ‘œํ˜„์‹๋งŒ์„ ์‚ฌ์šฉํ•  ๊ฒƒ์„ ๊ถŒ๊ณ ํ•˜๊ณ  ์žˆ๋‹ค. ํ•จ์ˆ˜ ํ˜ธ์ด์ŠคํŒ…์ด ํ•จ์ˆ˜ ํ˜ธ์ถœ ์ „ ๋ฐ˜๋“œ์‹œ ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ•˜์—ฌ์•ผ ํ•œ๋‹ค๋Š” ๊ทœ์น™์„ ๋ฌด์‹œํ•˜๋ฏ€๋กœ ์ฝ”๋“œ์˜ ๊ตฌ์กฐ๋ฅผ ์—‰์„ฑํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ง€์ ํ•œ๋‹ค.

๋˜ํ•œ ํ•จ์ˆ˜์„ ์–ธ์‹์œผ๋กœ ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•˜๋ฉด ์‚ฌ์šฉํ•˜๊ธฐ์— ์‰ฝ์ง€๋งŒ ๋Œ€๊ทœ๋ชจ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒฝ์šฐ ์ธํ„ฐํ”„๋ฆฌํ„ฐ๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์€ ์ฝ”๋“œ๋ฅผ ๋ณ€์ˆ˜ ๊ฐ์ฒด(VO)์— ์ €์žฅํ•˜๋ฏ€๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‘๋‹ต์†๋„๋Š” ํ˜„์ €ํžˆ ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ฃผ์˜ํ•ด์•ผ ํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค.

First-class object(์ผ๊ธ‰ ๊ฐ์ฒด)ยถ โ†‘

์ผ๊ธ‰ ๊ฐ์ฒด(First-class object)๋ž€ ์ƒ์„ฑ,๋Œ€์ž…,์—ฐ์‚ฐ,์ธ์ž ๋˜๋Š” ๋ฐ˜ํ™˜๊ฐ’์œผ๋กœ์„œ์˜ ์ „๋‹ฌ ๋“ฑ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ๊ธฐ๋ณธ์  ์กฐ์ž‘์„ ์ œํ•œ์—†์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋Œ€์ƒ์„ ์˜๋ฏธํ•œ๋‹ค.๋‹ค์Œ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋ฉด ์ผ๊ธ‰ ๊ฐ์ฒด๋กœ ๊ฐ„์ฃผํ•œ๋‹ค.

* 1. ๋ฌด๋ช…์˜ ๋ฆฌํ„ฐ๋Ÿด๋กœ ํ‘œํ˜„์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
* 2. ๋ณ€์ˆ˜๋‚˜ ์ž๋ฃŒ ๊ตฌ์กฐ(๊ฐ์ฒด, ๋ฐฐ์—ด ...)์— ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.
* 3. ํ•จ์ˆ˜์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.
* 4. ๋ฐ˜ํ™˜๊ฐ’(return value)์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

// 1. ๋ฌด๋ช…์˜ ๋ฆฌํ„ฐ๋Ÿด๋กœ ํ‘œํ˜„์ด ๊ฐ€๋Šฅํ•˜๋‹ค. // 2. ๋ณ€์ˆ˜๋‚˜ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์•ˆ์— ๋‹ด์„ ์ˆ˜ ์žˆ๋‹ค. var increase = function(num) {

return num + 1;

};

var decrease = function(num){

return num - 1;

};

var obj = {

increase: increase,
decrease: decrease

};

// 2. ํ•จ์ˆ˜์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ „๋‹ฌ ํ•  ์ˆ˜ ์žˆ๋‹ค. function calc(func, num){

return func(num);

}

console.log(calc(increase, 1)); console.log(calc(decrease, 1));

// 3. ๋ฐ˜ํ™˜๊ฐ’(return value)์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. function calc(mode){

var funcs = {
  plus:  function(left, right){ return left + right; },
  minus: function(left, right){ return left - right; }
};
return funcs[mode];

} console.log(calc(โ€˜plusโ€™)(2,1)); console.log(calc(โ€˜minusโ€™)(2,1)); //์ฝ”๋“œ๋ณด๊ธฐ!!!!!!

Javascript์˜ ํ•จ์ˆ˜๋Š” ์œ„์˜ ์กฐ๊ฑด์„ ๋ชจ๋‘ ๋งŒ์กฑํ•˜๋ฏ€๋กœ Javascript์˜ ํ•จ์ˆ˜๋Š” ์ผ๊ธ‰๊ฐ์ฒด์ด๋‹ค.๋”ฐ๋ผ์„œ Javascript์˜ ํ•จ์ˆ˜๋Š” ํก์‚ฌ ๋ณ€์ˆ˜์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ฝ”๋“œ์˜ ์–ด๋””์„œ๋“ ์ง€ ์ •์˜ ํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ•จ์ˆ˜์™€ ๋‹ค๋ฅธ ๊ฐ์ฒด๋ฅผ ๊ตฌ๋ถ„ ์ง–๋Š” ํŠน์ง•์€ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

๋งค๊ฐœ๋ณ€์ˆ˜(Parameter, ์ธ์ž)ยถ โ†‘

ํ•จ์ˆ˜์˜ ์ž‘์—… ์‹คํ–‰์„ ์œ„ํ•ด ์ถ”๊ฐ€์ ์ธ ์ •๋ณด๊ฐ€ ํ•„์š”ํ•  ๊ฒฝ์šฐ, ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•œ๋‹ค.๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ํ•จ์ˆ˜ ๋‚ด์—์„œ ๋ณ€์ˆ˜์™€ ๋™์ผํ•˜๊ฒŒ ๋™์ž‘ํ•œ๋‹ค.

๋งค๊ฐœ๋ณ€์ˆ˜(parameter, ์ธ์ž)vs ์ธ์ˆ˜(argument)ยถ โ†‘

๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ํ•จ์ˆ˜ ๋‚ด์—์„œ ๋ณ€์ˆ˜์™€ ๋™์ผํ•˜๊ฒŒ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ํ™•๋ณดํ•˜๋ฉฐ ์ „๋‹ฌ๋˜์–ด์ง„ ์ธ์ˆ˜๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜์— ํ• ๋‹น๋œ๋‹ค. ๋งŒ์•ฝ ์ธ์ˆ˜๊ฐ€ ์ „๋‹ฌ๋˜์ง€ ์•Š์œผ๋ฉด ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” undefined๋กœ ์ดˆ๊ธฐํ™”๋œ๋‹ค.

var foo = function (p1, p2) {

console.log(p1, p2);

};

foo(1); // 1 undefined

Call-by-valueยถ โ†‘

Primitives(๊ธฐ๋ณธ์ž๋ฃŒํ˜•) ์ธ์ˆ˜๋Š” Call-by-value(๊ฐ’์— ์˜ํ•œ ํ˜ธ์ถœ)๋กœ ๋™์ž‘ํ•œ๋‹ค. ์ด๋Š” ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ๊ธฐ๋ณธ์ž๋ฃŒํ˜• ์ธ์ˆ˜๋ฅผ ํ•จ์ˆ˜์— ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌํ•  ๋•Œ ๋งค๊ฐœ๋ณ€์ˆ˜์— ๊ฐ’์„ ๋ณต์‚ฌํ•˜์—ฌ ํ•จ์ˆ˜๋กœ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ์ด๋•Œ ํ•จ์ˆ˜ ๋‚ด์—์„œ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜์–ด๋„ ์ „๋‹ฌ์ด ์™„๋ฃŒ๋œ ๊ธฐ๋ณธ์ž์š”ํ˜• ๊ฐ’์€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š”๋‹ค.

function foo(primitive) {

primitive += 1;
return primitive;

}

var x = 0;

console.log(foo(x)); // 1 console.log(x); // 0

Call-by-referenceยถ โ†‘

๊ฐ์ฒด ํƒ€์ž…(์ฐธ์กฐ ํƒ€์ž…) ์ธ์ˆ˜๋Š” Call-by-reference(์ฐธ์กฐ์— ์˜ํ•œ ํ˜ธ์ถœ)๋กœ ๋™์ž‘ํ•œ๋‹ค. ์ด๋Š” ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ์ฐธ์กฐ ํƒ€์ž… ์ธ์ˆ˜๋ฅผ ํ•จ์ˆ˜์— ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌํ•  ๋•Œ ๋งค๊ฐœ๋ณ€์ˆ˜์— ๊ฐ’์ด ๋ณต์‚ฌ๋˜์ง€ ์•Š๊ณ  ๊ฐ์ฒด์˜ ์ฐธ์กฐ๊ฐ’์ด ๋งค๊ฐœ๋ณ€์ˆ˜์— ์ €์žฅ๋˜์–ด ํ•จ์ˆ˜๋กœ ์ „๋‹ฌ๋˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ์ด๋•Œ ํ•จ์ˆ˜ ๋‚ด์—์„œ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์ฐธ์กฐ๊ฐ’์ด ์ด์šฉํ•˜์—ฌ ๊ฐ์ฒด์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ–ˆ์„ ๋•Œ ์ „์ž˜๋˜์–ด์ง„ ์ฐธ์กฐํ˜•์˜ ์ธ์ˆ˜๊ฐ’๋„ ๊ฐ™์ด ๋ณ€๊ฒฝ๋œ๋‹ค.

function changeVal(primitive, obj) {

primitive += 100;
obj.name = 'Kim';
obj.gender = 'female';

}

var num = 100; var obj = {

name: 'Lee',
gender: 'male'

};

console.log(num); // 100 console.log(obj); // Object {name: โ€˜Leeโ€™, gender: โ€˜maleโ€™}

changeVal(num, obj);

console.log(num); // 100 console.log(obj); // Object {name: โ€˜Kimโ€™, gender: โ€˜femaleโ€™}

๋ฐ˜ํ™˜๊ฐ’(return value)ยถ โ†‘

ํ•จ์ˆ˜๋Š” ์ž์‹ ์„ ํ˜ธ์ถœํ•œ ์ฝ”๋“œ์—๊ฒŒ ์ˆ˜ํ–‰ํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜(return)ํ•  ์ˆ˜ ์žˆ๋‹ค.

* return ํ‚ค์›Œ๋“œ๋Š” ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ ์ฝ”๋“œ์—๊ฒŒ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
* ํ•จ์ˆ˜๋Š” ๋ฐฐ์—ด ๋“ฑ์„ ์ด์šฉํ•˜์—ฌ ํ•œ ๋ฒˆ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ฐ’์„ ๋ฆฌํ„ดํ•  ์ˆ˜ ์žˆ๋‹ค.
* ํ•จ์ˆ˜๋Š” ๋ฐ˜ํ™˜์„ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ๋‹ค.์ด๋•Œ ํ•จ์ˆ˜๋Š” ์•”๋ฌต์ ์œผ๋กœ undefined๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
* ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ•ด์„๊ธฐ๋Š” return ํ‚ค์›Œ๋“œ๋ฅผ ๋งŒ๋‚˜๋ฉด ํ•จ์ˆ˜์˜ ์‹คํ–‰์„ ์ค‘๋‹จํ•œ ํ›„,ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ ์ฝ”๋“œ๋กœ ๋˜๋Œ์•„๊ฐ„๋‹ค.๋งŒ์ผ return ํ‚ค์›Œ๋“œ ์ดํ›„์— ๋‹ค๋ฅธ ๊ตฌ๋ฌธ์ด ์กด์žฌํ•˜๋ฉด ๊ทธ ๊ตฌ๋ฌธ์€ ์‹คํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค.

function calculateArea(width, height) {

var area = width * height;
return area; // ๋‹จ์ผ ๊ฐ’์˜ ๋ฐ˜ํ™˜

} console.log(calculateArea(3, 5)); // 15 console.log(calculateArea(8, 5)); // 40

function getSize(width, height, depth) {

var area = width * height;
var volume = width * height * depth;
return [area, volume]; // ๋ณต์ˆ˜ ๊ฐ’์˜ ๋ฐ˜ํ™˜

}

console.log(โ€˜area is โ€™ + getSize(3, 2, 3)); // area is 6 console.log(โ€˜volume is โ€™ + getSize(3, 2, 3)); // volume is 18

ํ•จ์ˆ˜ ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐยถ โ†‘

ํ•จ์ˆ˜๋Š” ๊ฐ์ฒด์ด๋‹ค. ๋”ฐ๋ผ์„œ ํ•จ์ˆ˜๋„ ํ”„๋กœํผํ‹ฐ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.

function square(number) {

return number * number;

}

square.x = 10; square.y = 20;

console.log(square.x, square.y);

ํ•จ์ˆ˜๋Š” ์ผ๋ฐ˜ ๊ฐ์ฒด์™€๋Š” ๋‹ค๋ฅธ ํ•จ์ˆ˜๋งŒ์˜ ํ‘œ์ค€ ํ”„๋กœํผํ‹ฐ๋ฅผ ๊ฐ–๋Š”๋‹ค.

function square(number) {

return number * number;

} console.dir(square);

์—ฌ๋Ÿฌ๊ฐ€์ง€ ํ”„๋กœํผํ‹ฐ๋ฅผ ํ™˜์ธํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์ด๋“ค ์ค‘ length,prototype ํ”„๋กœํผํ‹ฐ๋Š” ECMAScript spec์—์„œ ์ •ํ•œ ํ‘œ์ค€ ํ”„๋กœํผํ‹ฐ์ด๋‹ค. ๋‚˜๋จธ์ง€ ํ”„๋กœํผํ‹ฐ๋Š” ECMAScript ํ‘œ์ค€ spec์€ ์•„๋‹ˆ๋‹ค.

arguments ํ”„๋กœํผํ‹ฐยถ โ†‘

arguments ๊ฐ์ฒด๋Š” ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ์ „๋‹ฌ๋œ ์ธ์ˆ˜(argument)๋“ค์˜ ์ •๋ณด๋ฅผ ๋‹ด๊ณ ์žˆ๋Š” ์ค€ํšŒ๊ฐ€๋Šฅํ•œ(iterable) ์œ ์‚ฌ ๋ฐฐ์—ด ๊ฐ์ฒด(array-like object)์ด๋‹ค. ํ•จ์ˆ˜ ๊ฐ์ฒด์˜ arguments ํ”„๋กœํผํ‹ฐ๋Š” arguments ๊ฐ์ฒด๋ฅผ ๊ฐ’์œผ๋กœ ์‚ฌ์ง€๋ฉฐ ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ์ง€์—ญ๋ณ€์ˆ˜์ฒ˜๋Ÿผ ์‚ฌ์šฉ๋œ๋‹ค. ์ฆ‰ ํ•จ์ˆ˜ ์™ธ๋ถ€์—์„œ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ํ•จ์ˆ˜ ์ •์˜์— ๋”ฐ๋ผ ์ธ์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜์ง€ ์•Š์•„๋„ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.

function multiply(x, y) {

console.log(arguments);
return x * y;

}

console.log(multiply()); // {} console.log(multiply(1)); // { โ€˜0โ€™: 1 } console.log(multiply(1,2)); // { โ€˜0โ€™: 1, โ€˜1โ€™: 2 } console.log(multiply(1,2,3));// { โ€˜0โ€™: 1, โ€˜1โ€™: 2, โ€˜2โ€™: 3 }

โš ๏ธ **GitHub.com Fallback** โš ๏ธ