์ƒˆ์†Œ์‹

์ธ๊ธฐ ๊ฒ€์ƒ‰์–ด

TL

21/09/17 TL. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ - ํ•จ์ˆ˜(2), ์Šค์ฝ”ํ”„

  • -

๐Ÿ‰ ํ•จ์ˆ˜ ํ˜ธ์ถœ

๐Ÿฅฅ ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์ธ์ˆ˜

ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด ํ•จ์ˆ˜ ๋ชธ์ฒด ๋‚ด์—์„œ ์•”๋ฌต์ ์œผ๋กœ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  undefined๋กœ ์ดˆ๊ธฐํ™”๋œ ์ดํ›„, ์ธ์ˆ˜๊ฐ€ ์ˆœ์„œ๋Œ€๋กœ ํ• ๋‹น๋œ๋‹ค.

function add(x, y) { // ์•”๋ฌต์ ์œผ๋กœ x, y๋ฅผ ์„ ์–ธ, ์ดˆ๊ธฐํ™” ํ›„ ์ธ์ˆ˜ 2, 5๋ฅผ ๋„˜๊ฒจ๋ฐ›๋Š” ๊ณผ์ •์„ ๊ฑฐ์นœ๋‹ค.
	return x + y; // x + y์˜ ๊ฐ’์„ ํ‰๊ฐ€ํ•œ ๋’ค ๋ฐ˜ํ™˜ํ•œ๋‹ค.
}

var result = add(2, 5); // ๋งค๊ฐœ๋ณ€์ˆ˜ x, y๋กœ ์ธ์ˆ˜ 2, 5๋ฅผ ๋„˜๊ธด๋‹ค.
// result์—๋Š” ํ‰๊ฐ€๋œ x + y์˜ ๊ฐ’์ด ๋‹ด๊ธด๋‹ค.

console.log(add(2)) // NaN
// x์—๋Š” 2๋ฅผ ๋„˜๊ธฐ์ง€๋งŒ, b๋Š” ๋„˜๊ธธ ๊ฐ’์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— undefined ์ƒํƒœ๋กœ ์œ ์ง€๋œ๋‹ค.
// 2 + undefined ์ด๋ฏ€๋กœ NaN์ด ๋ฐ˜ํ™˜๋œ๋‹ค.

fuction add2(x, y) {
	console.log(arguments);
	// Arguments(3) [2, 5, 10, callee: f, Symbol(Symbol.iterator): f]

	return x + y;
}

console.log(add2(2, 5, 10)); // 7
// ์ดˆ๊ณผ๋œ ์ธ์ˆ˜๋Š” arguments ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ๋กœ ๋ณด๊ด€๋œ๋‹ค.

๐Ÿฅฅ ์ธ์ˆ˜ ํ™•์ธ

js์˜ ๊ฒฝ์šฐ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ๋„ ๋ฌธ๋ฒ•์ƒ ์–ด๋– ํ•œ ๋ฌธ์ œ๊ฐ€ ์—†์–ด ๊ทธ๋Œ€๋กœ ์‹คํ–‰ํ•œ๋‹ค.

function add(x, y) { // ์•”๋ฌต์ ์œผ๋กœ x, y๋ฅผ ์„ ์–ธ, ์ดˆ๊ธฐํ™” ํ›„ ์ธ์ˆ˜ 2, 5๋ฅผ ๋„˜๊ฒจ๋ฐ›๋Š” ๊ณผ์ •์„ ๊ฑฐ์นœ๋‹ค.
	return x + y; // x + y์˜ ๊ฐ’์„ ํ‰๊ฐ€ํ•œ ๋’ค ๋ฐ˜ํ™˜ํ•œ๋‹ค.
}

var result = add(2, 5); // ๋งค๊ฐœ๋ณ€์ˆ˜ x, y๋กœ ์ธ์ˆ˜ 2, 5๋ฅผ ๋„˜๊ธด๋‹ค.
// result์—๋Š” ํ‰๊ฐ€๋œ x + y์˜ ๊ฐ’์ด ๋‹ด๊ธด๋‹ค.

console.log(add(2)) // NaN
// x์—๋Š” 2๋ฅผ ๋„˜๊ธฐ์ง€๋งŒ, b๋Š” ๋„˜๊ธธ ๊ฐ’์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— undefined ์ƒํƒœ๋กœ ์œ ์ง€๋œ๋‹ค.
// 2 + undefined ์ด๋ฏ€๋กœ NaN์ด ๋ฐ˜ํ™˜๋œ๋‹ค.

fuction add2(x, y) {
	console.log(arguments);
	// Arguments(3) [2, 5, 10, callee: f, Symbol(Symbol.iterator): f]

	return x + y;
}

console.log(add2(2, 5, 10)); // 7
// ์ดˆ๊ณผ๋œ ์ธ์ˆ˜๋Š” arguments ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ๋กœ ๋ณด๊ด€๋œ๋‹ค.
  1. js์˜ ํ•จ์ˆ˜๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์ธ์ˆ˜์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•˜์ง€ ์•Š๋Š”๋‹ค.
  2. js๋Š” ๋™์  ํƒ€์ž… ์–ธ์–ด์ด๋‹ค. ๋”ฐ๋ผ์„œ ๋งค๊ฐœ๋ณ€์ˆ˜ ํƒ€์ž…์„ ์‚ฌ์ •์— ์ง€์ •ํ•˜์ง€ ์•Š๋Š”๋‹ค.

์™€ ๊ฐ™์€ ์ด์œ ๋กœ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๋“ค์ด๋‹ค. ๋”ฐ๋ผ์„œ, js๋Š” ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•  ๋•Œ ์ ์ ˆํ•œ ์ธ์ˆ˜๊ฐ€ ์ „๋‹ฌ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค.

function add(x, y) {
	if (typeof x !== 'number' || typeof y !== 'number') {
		throw new TypeError('์ธ์ˆ˜๋Š” ๋ชจ๋‘ ์ˆซ์ž ๊ฐ’์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.');
	}
	
	return x + y;
}

console.log(add(2)); // TypeError: ์ธ์ˆ˜๋Š” ๋ชจ๋‘ ์ˆซ์ž ๊ฐ’์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
console.log(add('a', 'b')); // TypeError: ์ธ์ˆ˜๋Š” ๋ชจ๋‘ ์ˆซ์ž ๊ฐ’์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ธ์ˆ˜๊ฐ€ ์ „๋‹ฌ๋˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๋Š” ๊ฒฝ์šฐ์—” ๋งค๊ฐœ๋ณ€์ˆ˜์— ๊ธฐ๋ณธ๊ฐ’์„ ์ง€์ •ํ•˜๋ฉด ๋œ๋‹ค.

๐Ÿฅฅ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์ตœ๋Œ€ ๊ฐœ์ˆ˜

๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ์ˆœ์„œ์— ์˜๋ฏธ๊ฐ€ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ˆซ์ž๊ฐ€ ๋งŽ์•„์ง€๋ฉด ์ˆœ์„œ ์ œ์–ด ๋“ฑ์˜ ์ด์œ ๋กœ ํ•จ์ˆ˜ ์‚ฌ์šฉ์— ์–ด๋ ค์›€์ด ์ƒ๊ธฐ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๊ธ‰์  ์ ๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ์ด์ƒ์ ์ธ ํ•จ์ˆ˜๋Š” ํ•œ ๊ฐ€์ง€ ์ผ๋งŒ ํ•ด์•ผ ํ•˜๋ฉฐ ๊ฐ€๊ธ‰์  ์ž‘๊ฒŒ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค.

๋”ฐ๋ผ์„œ ๋งค๊ฐœ ๋ณ€์ˆ˜๋Š” ์ตœ๋Œ€ 3๊ฐœ ์ด์ƒ ๋„˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•˜๋ฉฐ ๋” ๋งŽ์•„์ง„๋‹ค๋ฉด ํ•˜๋‚˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ณ  ๊ฐ์ฒด๋ฅผ ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์ด ์œ ๋ฆฌํ•˜๋‹ค(ajax๊ฐ€ ๊ทธ๋Ÿฌํ•œ ํ˜•ํƒœ๋ฅผ ์ง€๋‹Œ๋‹ค). ์ด ๊ฒฝ์šฐ ํ”„๋กœํผํ‹ฐ ํ‚ค๋งŒ ์ •ํ™•ํžˆ ์ง€์ •ํ•˜๋ฉด ๋งค๊ฐœ๋ณ€์ˆ˜ ์ˆœ์„œ๋ฅผ ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ด๋Ÿฌํ•œ ๋ฐฉ๋ฒ•๋„ ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ๊ฐ์ฒด๋ฅผ ๋ณ€๊ฒฝํ–ˆ์„ ๋–„ ํ•จ์ˆ˜ ์™ธ๋ถ€์˜ ๊ฐ์ฒด๊ฐ€ ๋ณ€๊ฒฝ๋˜๋Š” ๋ถ€์ˆ˜ ํšจ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฃผ์˜ํ•ด์•ผ ํ•œ๋‹ค.

๐Ÿ‰ ์ฐธ์กฐ์— ์˜ํ•œ ์ „๋‹ฌ๊ณผ ์™ธ๋ถ€ ์ƒํƒœ์˜ ๋ณ€๊ฒฝ

์›์‹œ ๊ฐ’์€ ๊ฐ’์— ์˜ํ•œ ์ „๋‹ฌ, ๊ฐ์ฒด๋Š” ์ฐธ์กฐ์— ์˜ํ•œ ์ „๋‹ฌ ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค.

function changeVal(primitive, obj) {
	primitive += 100;
	obj.name = 'Kim';
}

var num = 100;
var person = { name: 'Lee' };

changeVal(num, person);

console.log(num); // 100
consoel.log(person); // {name: "Kim"}

์›์‹œ ๊ฐ’์€ ๊ฐ’ ์ž์ฒด๊ฐ€ ๋ณต์‚ฌ๋ผ ๋งค๊ฐœ๋ณ€์ˆ˜์— ์ „๋‹ฌ๋˜๊ธฐ ๋•Œ๋ฌธ์— ํ•จ์ˆ˜ ๋ชธ์ฒด์—์„œ ๊ทธ ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด๋„ ์›๋ณธ์ด ์˜ค์—ผ๋˜์ง€ ์•Š๋Š”๋‹ค.

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

์™ธ๋ถ€ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ์™ธ๋ถ€ ์ƒํƒœ์— ์˜์กดํ•˜์ง€๋„ ์•Š๋Š” ํ•จ์ˆ˜๋ฅผ ์ˆœ์ˆ˜ ํ•จ์ˆ˜๋ผ ํ•œ๋‹ค. ์ˆœ์ˆ˜ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๋ถ€์ˆ˜ ํšจ๊ณผ๋ฅผ ์ตœ๋Œ€ํ•œ ์–ต์ œํ•˜์—ฌ ์˜ค๋ฅ˜๋ฅผ ํ”ผํ•˜๊ณ  ํ”„๋กœ๊ทธ๋žจ์˜ ์•ˆ์ •์„ฑ์„ ๋†’์ด๋ ค๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„์„ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ผ ํ•œ๋‹ค.

๐Ÿ‰ ๋‹ค์–‘ํ•จ ํ•จ์ˆ˜์˜ ํ˜•ํƒœ

๐Ÿฅฅ ์ฆ‰์‹œ ์‹คํ–‰ ํ•จ์ˆ˜

ํ•จ์ˆ˜ ์ •์˜์™€ ๋™์‹œ์— ์ฆ‰์‹œ ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋งํ•œ๋‹ค. ๋‹จ ํ•œ ๋ฒˆ๋งŒ ํ˜ธ์ถœ๋˜๋ฉฐ ๋‹ค์‹œ ํ˜ธ์ถœํ•  ์ˆ˜ ์—†๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์ต๋ช… ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

function changeVal(primitive, obj) {
	primitive += 100;
	obj.name = 'Kim';
}

var num = 100;
var person = { name: 'Lee' };

changeVal(num, person);

console.log(num); // 100
consoel.log(person); // {name: "Kim"}

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

๊ทธ๋ฃน ์—ฐ์‚ฐ์ž์˜ ํ”ผ์—ฐ์‚ฐ์ž๋Š” ๊ฐ’์œผ๋กœ ํ‰๊ฐ€๋˜๊ธฐ ๋•Œ๋ฌธ์— ํ•จ์ˆ˜ ๋ฆฌํ„ฐ๋Ÿด๋กœ ํ‰๊ฐ€๋˜์–ด ํ•จ์ˆ˜ ๊ฐ์ฒด๊ฐ€ ๋œ๋‹ค. ์ฆ‰, ํ•จ์ˆ˜ ๋ฆฌํ„ฐ๋Ÿด์„ ํ‰๊ฐ€ํ•ด ํ•จ์ˆ˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ๊ทธ๋ฃน ์—ฐ์‚ฐ์ž๋กœ ๋ฌถ๋Š” ๊ฒƒ์ด๋‹ค.

์ด ์™ธ์—๋„ ์—ฌ๋Ÿฌ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

(function () { // ์ด ๊ฒฝ์šฐ๊ฐ€ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ด๋‹ค.
	// ...
}());

(function () {
	// ...
})();

!function() {
	// ...
}();

+function() {
	// ...
}();

์ฆ‰์‹œ ์‹คํ–‰ ํ•จ์ˆ˜๋„ ๊ฐ’ ๋ฐ˜ํ™˜, ์ธ์ž ์ „๋‹ฌ ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

var res = (function () {
	var a = 3;
	var b = 5;
	return a * b;
}());

console.log(res); // 15

res = (function (a, b) {
	return a * b;
}(3, 5));

console.log(res); // 15

๐Ÿฅฅ ์žฌ๊ท€ ํ•จ์ˆ˜

์žฌ๊ท€ ํ˜ธ์ถœํ•  ๋•Œ๋Š” ํ•จ์ˆ˜ ์ด๋ฆ„๋„ ๋˜๊ณ , ์‹๋ณ„์ž๋กœ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.

var res = (function () {
	var a = 3;
	var b = 5;
	return a * b;
}());

console.log(res); // 15

res = (function (a, b) {
	return a * b;
}(3, 5));

console.log(res); // 15

๐Ÿฅฅ ์ค‘์ฒฉ ํ•จ์ˆ˜

ES6 ์ด์ „์—๋Š” ์ฝ”๋“œ์˜ ์ตœ์ƒ์œ„ ๋˜๋Š” ๋‹ค๋ฅธ ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ๋งŒ ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ์—ˆ์œผ๋‚˜ ES6๋ถ€ํ„ฐ๋Š” if ๋ฌธ์ด๋‚˜ for๋ฌธ ๋“ฑ์˜ ์ฝ”๋“œ ๋ธ”๋Ÿญ ๋‚ด์—์„œ๋„ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฌผ๋ก  ๋ฐ”๋žŒ์งํ•˜์ง„ ์•Š๋‹ค.

๐Ÿฅฅ ์ฝœ๋ฐฑ ํ•จ์ˆ˜

ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ๋‹ค๋ฅธ ํ•จ์ˆ˜์˜ ๋‚ด๋ถ€๋กœ ์ „๋‹ฌ๋˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ฝœ๋ฐฑํ•จ์ˆ˜๋ผ๊ณ  ํ•˜๋ฉฐ, ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ํ•จ์ˆ˜์˜ ์™ธ๋ถ€์—์„œ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์ „๋‹ฌ ๋ฐ›์€ ํ•จ์ˆ˜๋ฅผ ๊ณ ์ฐจํ•จ์ˆ˜(HOF)๋ผ๊ณ  ํ•œ๋‹ค.

์ฝœ๋ฐฑํ•จ์ˆ˜๋Š” ๊ณ ์ฐจ ํ•จ์ˆ˜์— ์˜ํ•ด ํ˜ธ์ถœ๋˜๋ฉฐ ์ด๋•Œ ๊ณ ์ฐจ ํ•จ์ˆ˜๋Š” ํ•„์š”์— ๋”ฐ๋ผ ์ฝœ๋ฐฑ ํ•จ์ˆ˜์— ์ธ์ˆ˜๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ณ ์ฐจ ํ•จ์ˆ˜์— ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์ „๋‹ฌํ•  ๋•Œ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ์•Š๊ณ  ํ•จ์ˆ˜ ์ž์ฒด๋ฅผ ์ „๋‹ฌํ•ด์•ผ ํ•œ๋‹ค.

์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์ต๋ช… ํ•จ์ˆ˜ ๋ฆฌํ„ฐ๋Ÿด๋กœ ์ •์˜ํ•˜๋ฉด์„œ ๊ณง๋ฐ”๋กœ ๊ณ ์ฐจ ํ•จ์ˆ˜์— ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด๋‹ค.

function repeat(n, f) {
	for (var i = 0; i < n; i++) {
		f(i); // i๋ฅผ ์ „๋‹ฌํ•˜๋ฉฐ f๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.
	}
}

reapeat(5, function (i) {
	if (i % 2) console.log(i);
}); // 1 3

์ฝœ๋ฐฑํ•จ์ˆ˜๋Š” ์ผ๋ถ€๋ถ„๋งŒ ๋‹ค๋ฅธ ํ•จ์ˆ˜๋ฅผ ๋งค๋ฒˆ ์ƒˆ๋กญ๊ฒŒ ์ •์˜ํ•  ํ•„์š”๋ฅผ ์—†๊ฒŒ ๋งŒ๋“ค ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ(์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ, Ajax ํ†ต์‹ , ํƒ€์ด๋จธ ํ•จ์ˆ˜ ๋“ฑ)์— ํ™œ์šฉ๋˜๋Š” ์ค‘์š”ํ•œ ํŒจํ„ด์ด๋‹ค.

// ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•œ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ
document.getElementById('myButton').addEventListener('click', function() {
	console.log('button clicked!');
});

// ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ
setTimeout(function() {
	console.log('1์ดˆ ๊ฒฝ๊ณผ');
}, 1000);

๋˜ํ•œ ๋ฐฐ์—ด ๊ณ ์ฐจ ํ•จ์ˆ˜์—์„œ๋„ ์‚ฌ์šฉ๋œ๋‹ค. js์—์„œ ๋ฐฐ์—ด์€ ์‚ฌ์šฉ ๋นˆ๋„๊ฐ€ ๋งค์šฐ ๋†’์€ ์ž๋ฃŒ๊ตฌ์กฐ์ด๊ณ  ๋ฐฐ์—ด์„ ๋‹ค๋ฃฐ ๋•Œ ๋ฐฐ์—ด ๊ณ ์ฐจ ํ•จ์ˆ˜๋Š” ๋งค์šฐ ์ค‘์š”ํ•˜๋‹ค.

var res = [1, 2, 3].map(function (item) {
	return item * 2;
});

console.log(res); // [2, 4, 6]

res = [1, 2, 3].filter(function (item) {
	return item % 2;
});

console.log(res); // [1, 3]

res = [1, 2, 3].reduce(function (acc, cur) {
	return acc + cur;
}, 0);

console.log(res); // 6

๐Ÿฅฅ ์ˆœ์ˆ˜ ํ•จ์ˆ˜์™€ ๋น„์ˆœ์ˆ˜ ํ•จ์ˆ˜

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

  • ์กฐ๊ฑด๋ฌธ์ด๋‚˜ ๋ฐ˜๋ณต๋ฌธ์€ ๋กœ์ง์˜ ํ๋ฆ„์„ ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ต๊ฒŒ ํ•ด์„œ ๊ฐ€๋…์„ฑ์„ ํ•ด์น˜๊ณ , ๋ณ€์ˆ˜ ๊ฐ’์€ ๋ˆ„๊ตฐ๊ฐ€์— ์˜ํ•ด ์–ธ์ œ๋“ ์ง€ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์–ด ์˜ค๋ฅ˜ ๋ฐœ์ƒ์˜ ๊ทผ๋ณธ ์›์ธ์ด ๋  ์ˆ˜ ์žˆ๋‹ค.

js๋Š” ๋ฉ€ํ‹ฐ ํŒจ๋Ÿฌ๋‹ค์ž„ ์–ธ์–ด์ด๋ฏ€๋กœ ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ ๊ทน์ ์œผ๋กœ ํ™œ์šฉํ•˜๊ณ  ์žˆ๋‹ค.

 

๐Ÿ‰์Šค์ฝ”ํ”„๋ž€?

๋ชจ๋“  ์‹๋ณ„์ž(๋ณ€์ˆ˜ ์ด๋ฆ„, ํ•จ์ˆ˜ ์ด๋ฆ„, ํด๋ž˜์Šค ์ด๋ฆ„ ๋“ฑ)๋Š” ์ž์‹ ์ด ์„ ์–ธ๋œ ์œ„์น˜์— ์˜ํ•ด ๋‹ค๋ฅธ ์ฝ”๋“œ๊ฐ€ ์‹๋ณ„์ž ์ž์‹ ์„ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋Š” ์œ ํšจ ๋ฒ”์œ„๊ฐ€ ๊ฒฐ์ •๋œ๋‹ค. ์ด๋ฅผ ์Šค์ฝ”ํ”„๋ผ ํ•œ๋‹ค. ์ฆ‰, ์Šค์ฝ”ํ”„๋Š” ์‹๋ณ„์ž๊ฐ€ ์œ ํšจํ•œ ๋ฒ”์œ„๋ฅผ ๋งํ•œ๋‹ค.

์‹๋ณ„์ž ๊ฒฐ์ • : ์ด๋ฆ„์ด ๊ฐ™์€ 2๊ฐœ์˜ ๋ณ€์ˆ˜ ์ค‘ ์–ด๋–ค ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•ด์•ผ ํ• ์ง€ js ์—”์ง„์ด ๊ฒฐ์ •ํ•˜๋Š” ๊ฑธ ๋งํ•œ๋‹ค.

  • ์Šค์ฝ”ํ”„๋ž€ js ์—”์ง„์ด ์‹๋ณ„์ž๋ฅผ ๊ฒ€์ƒ‰ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ทœ์น™์ด๋ผ๊ณ ๋„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

js ์—”์ง„์€ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ์ฝ”๋“œ์˜ ๋ฌธ๋งฅ์„ ๊ณ ๋ คํ•œ๋‹ค.

  • ์ฝ”๋“œ๊ฐ€ ์–ด๋””์„œ ์‹คํ–‰๋˜๋ฉฐ ์–ด๋–ค ์ฝ”๋“œ๊ฐ€ ์žˆ๋Š”์ง€๋ฅผ ๋ ‰์‹œ์ปฌ ํ™˜๊ฒฝ์ด๋ผ ๋ถ€๋ฅธ๋‹ค. ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋Š” ์ด๋ฅผ ๊ตฌํ˜„ํ•œ ๊ฒƒ์ด๋‹ค. ์ฆ‰, ๋ชจ๋“  ์ฝ”๋“œ๋Š” ์‹คํ–‰ ์ปจํ…์ŠคํŠธ์—์„œ ํ‰๊ฐ€๋˜๊ณ  ์‹คํ–‰๋œ๋‹ค.

๋ณ€์ˆ˜ ์ด๋ฆ„์ด ๊ฐ™๋”๋ผ๋„ ์Šค์ฝ”ํ”„๊ฐ€ ๋‹ค๋ฅด๋‹ค๋ฉด ๋‹ค๋ฅธ ๋ณ„๊ฐœ์˜ ๋ณ€์ˆ˜๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. ์‹๋ณ„์ž๋ผ๋Š” ๊ฑด ๋ง ๊ทธ๋Œ€๋กœ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋„๋ก ์œ ์ผํ•ด์•ผํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‹ค๋ฅธ ์Šค์ฝ”ํ”„์—๋Š” ๊ฐ™์€ ์ด๋ฆ„์˜ ์‹๋ณ„์ž๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฆ‰, ์Šค์ฝ”ํ”„๋Š” ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋‹ค.

  • var๊ฐ€ ์•„๋‹Œ let, const๋ฅผ ๊ถŒ์žฅํ•˜๋Š” ๊ฒƒ๋„ ์ด ์ด์œ ์ด๋‹ค. var ํ‚ค์›Œ๋“œ๋กœ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋Š” ๊ฐ™์€ ์Šค์ฝ”ํ”„ ๋‚ด์—์„œ ์ค‘๋ณต ์„ ์–ธ์ด ํ—ˆ์šฉ๋œ๋‹ค.
  • ๋„ค์ž„์ŠคํŽ˜์ด์Šค : ๊ฐœ์ฒด๋ฅผ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒ”์œ„๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. ํ•˜๋‚˜์˜ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์•ˆ์—์„œ๋Š” ๋‹จ ํ•˜๋‚˜์˜ ๊ฐœ์ฒด๋งŒ์„ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

๐Ÿ‰ ์Šค์ฝ”ํ”„ ์ฒด์ธ

ํ•จ์ˆ˜๊ฐ€ ์ค‘์ฒฉ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์€ ์Šค์ฝ”ํ”„ ๋˜ํ•œ ์ค‘์ฒฉ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋ง์ด๋‹ค. ๋ชจ๋“  ์Šค์ฝ”ํ”„๋Š” ํ•˜๋‚˜์˜ ๊ณ„์ธต์  ๊ตฌ์กฐ๋กœ ์—ฐ๊ฒฐ๋˜๋ฉฐ ๋ชจ๋“  ์ง€์—ญ ์Šค์ฝ”ํ”„์˜ ์ตœ์ƒ์œ„ ์Šค์ฝ”ํ”„๋Š” ์ „์—ญ ์Šค์ฝ”ํ”„๋‹ค. ์ด๋ ‡๊ฒŒ ์Šค์ฝ”ํ”„๊ฐ€ ๊ณ„์ธต์ ์œผ๋กœ ์—ฐ๊ฒฐ๋œ ๊ฒƒ์„ ์Šค์ฝ”ํ”„ ์ฒด์ธ์ด๋ผ๊ณ  ํ•œ๋‹ค.

๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•  ๋•Œ js ์—”์ง„์€ ์Šค์ฝ”ํ”„ ์ฒด์ธ์„ ํ†ตํ•ด ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•˜๋Š” ์ฝ”๋“œ์˜ ์Šค์ฝ”ํ”„์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ์ƒ์œ„ ์Šค์ฝ”ํ”„ ๋ฐฉํ–ฅ์œผ๋กœ ์ด๋™ํ•˜๋ฉฐ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋ฅผ ๊ฒ€์ƒ‰ํ•œ๋‹ค.

js ์—”์ง„์€ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ์— ์•ž์„œ ๋ ‰์‹œ์ปฌ ํ™˜๊ฒฝ์„ ์ƒ์„ฑํ•œ๋‹ค. ๋ณ€์ˆ˜ ์„ ์–ธ์ด ์‹คํ–‰๋˜๋ฉด ๋ณ€์ˆ˜ ์‹๋ณ„์ž๊ฐ€ ์ด ์ž๋ฃŒ๊ตฌ์กฐ์— ํ‚ค๋กœ ๋“ฑ๋ก๋˜๊ณ , ๋ณ€์ˆ˜ ํ• ๋‹น์ด ์ผ์–ด๋‚˜๋ฉด ์ด ์ž๋ฃŒ๊ตฌ์กฐ์˜ ๋ณ€์ˆ˜ ์‹๋ณ„์ž์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์„ ๋ณ€๊ฒฝํ•œ๋‹ค. ๋ณ€์ˆ˜์˜ ๊ฒ€์ƒ‰๋„ ์ด ์ž๋ฃŒ๊ตฌ์กฐ ์ƒ์—์„œ ์ด๋ค„์ง„๋‹ค.

๐Ÿ‰ ํ•จ์ˆ˜ ๋ ˆ๋ฒจ ์Šค์ฝ”ํ”„

์ง€์—ญ์€ ํ•จ์ˆ˜ ๋ชธ์ฒด ๋‚ด๋ถ€๋ฅผ ๋งํ•˜๊ณ  ์ง€์—ญ์€ ์ง€์—ญ ์Šค์ฝ”ํ”„๋ฅผ ๋งํ•œ๋‹ค. ์ด๋Š” ์ฝ”๋“œ ๋ธ”๋ก์ด ์•„๋‹Œ ํ•จ์ˆ˜์— ์˜ํ•ด์„œ๋งŒ ์ง€์—ญ ์Šค์ฝ”ํ”„๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.

C, ์ž๋ฐ” ๋“ฑ์„ ๋น„๋กฏํ•œ ๋Œ€๋ถ€๋ถ„์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋Š” ํ•จ์ˆ˜ ๋ชธ์ฒด๋งŒ์ด ์•„๋‹ˆ๋ผ ๋ชจ๋“  ์ฝ”๋“œ ๋ธ”๋ก(if, for, while, try/catch ๋“ฑ)์ด ์ง€์—ญ ์Šค์ฝ”ํ”„๋ฅผ ๋งŒ๋“ ๋‹ค. ์ด๋Ÿฌํ•œ ํŠน์„ฑ์„ ๋ธ”๋ก ๋ ˆ๋ฒจ ์Šค์ฝ”ํ”„๋ผ ํ•œ๋‹ค. ํ•˜์ง€๋งŒ var ํ‚ค์›Œ๋“œ๋กœ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋Š” ์˜ค๋กœ์ง€ ํ•จ์ˆ˜์˜ ์ฝ”๋“œ ๋ธ”๋ก(ํ•จ์ˆ˜ ๋ชธ์ฒด)๋งŒ์„ ์ง€์—ญ ์Šค์ฝ”ํ”„๋กœ ์ธ์ •ํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ํŠน์„ฑ์„ ํ•จ์ˆ˜ ๋ ˆ๋ฒจ ์Šค์ฝ”ํ”„๋ผ ํ•œ๋‹ค.

if (true) {
	var a = 'b';
}

function foo() {
	var b = 'c';
}

console.log(a); // b
console.log(b); // Uncaught ReferenceError: b is not defined

ES6์—์„œ ๋„์ž…๋œ let, const ํ‚ค์›Œ๋“œ๋Š” ๋ธ”๋ก ๋ ˆ๋ฒจ ์Šค์ฝ”ํ”„๋ฅผ ์ง€์›ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์ด๋ฅผ ์ด์šฉํ•  ๊ฒƒ์ด ๊ถŒ์žฅ๋œ๋‹ค.

๐Ÿ‰ ๋ ‰์‹œ์ปฌ ์Šค์ฝ”ํ”„

๋™์  ์Šค์ฝ”ํ”„ : ํ•จ์ˆ˜๋ฅผ ์–ด๋””์„œ ํ˜ธ์ถœํ–ˆ๋Š”์ง€์— ๋”ฐ๋ผ ํ•จ์ˆ˜์˜ ์ƒ์œ„ ์Šค์ฝ”ํ”„๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค. ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๋Š” ์‹œ์ ์— ๋™์ ์œผ๋กœ ์ƒ์œ„ ์Šค์ฝ”ํ”„๋ฅผ ๊ฒฐ์ •ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋™์  ์Šค์ฝ”ํ”„๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

๋ ‰์‹œ์ปฌ ์Šค์ฝ”ํ”„ : ํ•จ์ˆ˜๋ฅผ ์–ด๋””์„œ ์ •์˜ํ–ˆ๋Š”์ง€์— ๋”ฐ๋ผ ํ•จ์ˆ˜์˜ ์ƒ์œ„ ์Šค์ฝ”ํ”„๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค. ์ƒ์œ„ ์Šค์ฝ”ํ”„๊ฐ€ ๋™์ ์œผ๋กœ ๋ณ€ํ•˜์ง€ ์•Š๊ณ  ํ•จ์ˆ˜ ์ •์˜๊ฐ€ ํ‰๊ฐ€๋˜๋ฏ€๋กœ ์ •์  ์Šค์ฝ”ํ”„๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. js๋ฅผ ๋น„๋กฏํ•œ ๋Œ€๋ถ€๋ถ„์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋Š” ๋ ‰์‹œ์ปฌ ์Šค์ฝ”ํ”„๋ฅผ ๋”ฐ๋ฅธ๋‹ค.

js๋Š” ๋ ‰์‹œ์ปฌ ์Šค์ฝ”ํ”„๋ฅผ ๋”ฐ๋ฅด๋ฏ€๋กœ ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋œ ์œ„์น˜๋Š” ์ƒ์œ„ ์Šค์ฝ”ํ”„ ๊ฒฐ์ •์— ์–ด๋– ํ•œ ์˜ํ–ฅ๋„ ์ฃผ์ง€ ์•Š๋Š”๋‹ค. ์ฆ‰, ํ•จ์ˆ˜์˜ ์ƒ์œ„ ์Šค์ฝ”ํ”„๋Š” ์–ธ์ œ๋‚˜ ์ž์‹ ์ด ์ •์˜๋œ ์Šค์ฝ”ํ”„๋‹ค.

ํ•จ์ˆ˜ ์ •์˜๊ฐ€ ์‹คํ–‰๋˜์–ด ์ƒ์„ฑ๋œ ํ•จ์ˆ˜ ๊ฐ์ฒด๋Š” ์ด๋ ‡๊ฒŒ ๊ฒฐ์ •๋œ ์ƒ์œ„ ์Šค์ฝ”ํ”„๋ฅผ ๊ธฐ์–ตํ•œ๋‹ค. ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ๋งˆ๋‹ค ํ•จ์ˆ˜์˜ ์ƒ์œ„ ์Šค์ฝ”ํ”„๋ฅผ ์ฐธ์กฐํ•  ํ•„์š”๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

var x = 1;

function foo() {
	var x = 10;
	bar();
}

function bar() {
	console.log(x);
}

foo(); // 1
bar(); // 1
Contents

ํฌ์ŠคํŒ… ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค

์ด ๊ธ€์ด ๋„์›€์ด ๋˜์—ˆ๋‹ค๋ฉด ๊ณต๊ฐ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.