Functions (ํจ์) โ
๐งฉ Notes
ํจ์๋ ์ฝ๋์ ํต์ฌ ๋จ์๋ค.
Airbnb ๊ฐ์ด๋๋ ๋ช
ํํ ์ ์ธ, ์์ธก ๊ฐ๋ฅํ ๋์, ์ผ๊ด๋ ์คํ์ผ์ ํตํด ๊ฐ๋
์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ๋์ด๋ ํจ์๋ฅผ ์์ฑํ๋๋ก ๊ถ์ฅํ๋ค.
1. ํจ์ ์ ์ธ์ ๋์ ๊ธฐ๋ช
ํจ์ ํํ์
์ฌ์ฉ โ
eslint: func-style
// bad
function foo() {
// ...
}
// bad
// ์ต๋ช
ํจ์๋ ์คํ ์ถ์ ์ด ์ด๋ ต๋ค.
const foo = function () {
// ...
};
// good
// ๋ณ์๋ช
๊ณผ ๊ตฌ๋ถ๋๋ ๊ณ ์ ํ ์ด๋ฆ(lexical name)์ ์ง์
const short = function longUniqueMoreDescriptiveLexicalFoo() {
// ...
};
- ํจ์ ์ ์ธ๋ฌธ์ ํธ์ด์คํ ๋์ด ์ ์ ์ ์๋ ํธ์ถ๋ ์ ์์ผ๋ฏ๋ก ์ฝ๋ ํ๋ฆ์ด ๋ถ๋ช ํํด์ง๋ค.
- ํจ์๊ฐ ํฌ๊ฑฐ๋ ๋ณต์กํ๋ค๋ฉด ๋ณ๋ ๋ชจ๋๋ก ๋ถ๋ฆฌํด์ผ ํ๋ค.
- ํจ์ ํํ์์๋ ๋ช ์์ ์ด๋ฆ์ ๋ถ์ด๋ฉด ๋๋ฒ๊น ์ ํธ์ถ ์คํ ์ถ์ ์ด ์ฉ์ดํ๋ค.
2. ์ฆ์ ์คํ ํจ์(IIFE)๋ ๊ดํธ๋ก ๊ฐ์ธ๊ธฐ โ
eslint: wrap-iife
// ์ฆ์ ํธ์ถ ํจ์ ํํ์ (IIFE)
(function () {
console.log('Welcome to the Internet. Please follow me.');
})();
- IIFE๋ ํ๋์
ํํ์
๋จ์์ด๋ฏ๋ก, ๊ดํธ๋ก ๊ฐ์ธ ๋ช ํํ ํํํด์ผ ํ๋ค. - ๋จ,
๋ชจ๋ ์์คํ ํ๊ฒฝ
์ ์ฐ๋ ํ๊ฒฝ์์๋ IIFE ์์ฒด๊ฐ ๋ถํ์ํ๋ค.
๐ก ์ฆ์ ์คํ ํจ์ (IIFE, Immediately Invoked Function Expression)
์ฆ์ ์คํ ํจ์๋ ์ ์๋์๋ง์ ๋ฐ๋ก ์คํ๋๋ ํจ์๋ค. ๋ง ๊ทธ๋๋ก ํจ์๋ฅผ ์ ์ธ๊ณผ ๋์์ ํธ์ถํ๋ ํจ์ ํํ์์ด๋ค. ํจ์๋ฅผ ๊ดํธ๋ก ๊ฐ์ธ์ ํํ์์ผ๋ก ๋ง๋ค๊ณ , ๋ง์ง๋ง์ ()
๋ก ์ฆ์ ํธ์ถํ๋ ํํ์ด๋ค.
์ ๊ดํธ๋ก ๊ฐ์ธ์ผ ํ ๊น?
์๋ฐ์คํฌ๋ฆฝํธ๋ function foo() {}
๋ฅผ ์ ์ธ๋ฌธ
์ผ๋ก ์ธ์ํ๋ค.
ํ์ง๋ง ์ ์ธ
์ด ์๋๋ผ ํํ์
์ผ๋ก์ ์คํํ๊ณ ์ถ๊ธฐ ๋๋ฌธ์, ๊ดํธ๋ก ๊ฐ์ธ์ "์ด๊ฑด ํํ์์ด์ผ"๋ผ๊ณ ๋ช
ํํ๊ฒ ์๋ ค์ฃผ๋ ๊ฒ์ด๋ค.
// ์ ์ธ๋ฌธ (ํธ์ถ๋์ง ์์)
function hello() {
console.log('hello');
}
// ํํ์์ผ๋ก ๋ง๋ ๋ค ์ฆ์ ์คํ
(function () {
console.log('hello');
})();
ํ๋ ์๋ฐ์คํฌ๋ฆฝํธ(ES6+)์์๋ let
, const
, import/export
๋ก ์ค์ฝํ๊ฐ ๋ช
ํํด์ก๊ธฐ ๋๋ฌธ์ IIFE
๋ฅผ ์ง์ ์ธ ์ผ์ ๊ฑฐ์ ์๋ค.
Airbnb ๊ฐ์ด๋์์ โ๋ชจ๋ ์์คํ
์ ์ฐ๋ ํ๊ฒฝ์์๋ ๋ถํ์ํ๋คโ๋ ๋ง์ด ๋ฐ๋ก ์ด ๋ป์ด๋ค!
3. ํจ์๋ ๋ธ๋ก (if / while
๋ฑ) ์์์ ์ ์ธํ์ง ๋ง ๊ฒ โ
eslint: no-loop-func
// bad
// if ๋ธ๋ก ์์์ ์ ์ธ๋์๋๋ฐ,
if (isUser) {
function test() {}
}
test(); // ๋ฐ์์๋ ํธ์ถ ๊ฐ๋ฅ โ ๋ฌธ์ !
// good
let test;
if (isUser) {
test = () => {};
}
test(); // ์๋
- ํจ์ ์ ์ธ์ ๋ธ๋ก ๋ฒ์๊ฐ ์๋
ํจ์/์ ์ญ
์ค์ฝํ์์๋ง ์ ํจํ๋ค. - ๋ธ๋ก ๋ด๋ถ ์ ์ธ์ ๋ธ๋ผ์ฐ์ ๋ง๋ค ๋ค๋ฅด๊ฒ ๋์ํ๋ค.
4. ECMA-262
: ํจ์ ์ ์ธ๋ฌธ์ ๋ธ๋ก ๋ด๋ถ์์ ํ์ฉ๋์ง ์์ โ
ECMA-262 ๋ช
์ธ์ ๋ฐ๋ฅด๋ฉด, ๋ธ๋ก์ ๋จ์ํ ์ฌ๋ฌ ๊ตฌ๋ฌธ์ ๋ฌถ๋ ์งํฉ์ผ ๋ฟ์ด๋ฉฐ,
ํจ์ ์ ์ธ๋ฌธ์ ๊ทธ ์์ ํฌํจ๋ ์ ์๋ ๋ณ๋์ ๋ฌธ๋ฒ ์์๋ก ๊ฐ์ฃผ๋๋ค.
// bad
if (currentUser) {
// ๋ธ๋ก ๋ด๋ถ์์ ํจ์ ์ ์ธ๋ฌธ ์ฌ์ฉ
function test() {
console.log('Nope.');
}
}
// good
let test;
if (currentUser) {
// ํจ์ ํํ์์ผ๋ก ์์ ํ๊ฒ ์์ฑ
test = () => {
console.log('Yup.');
};
}
bad
: ECMA-262 ๋ช ์ธ์ ๋ฐ๋ฅด๋ฉด, ํจ์ ์ ์ธ๋ฌธ์ ํจ์ ๋ณธ๋ฌธ ๋๋ ์ ์ญ ์ฝ๋์ ์ต์์ ์์ค์์๋ง ์ ์ํ ์ ์๋ค. ์ฆ,if
,for
,while
๋ฑ ๋ธ๋ก๋ฌธ ๋ด๋ถ์์ ์ ์ธํ๋ ๊ฒ์ ๋นํ์ค์ ์ด๋ฉฐ, ๋ธ๋ผ์ฐ์ ๋ง๋ค ๋์์ด ๋ค๋ฅผ ์ ์๋ค.good
: ํจ์ ํํ์์๊ฐ์ผ๋ก ํ๊ฐ๋๋ ํจ์
์ด๋ฏ๋ก ๋ธ๋ก ๋ด๋ถ์์๋ ์์ ํ๊ฒ ์ฌ์ฉํ ์ ์๋ค. ์ด ๋ฐฉ์์ ๋ช ์ธ์ ๋ถํฉํ๋ฉฐ, ์ค์ฝํ๊ฐ ๋ช ํํ๊ฒif
๋ธ๋ก ๋ด๋ถ๋ก ํ์ ๋๋ค.
5. ๋งค๊ฐ๋ณ์ ์ด๋ฆ์ arguments
๋ก ์ง์ง ๋ง์ธ์ โ
// bad
function foo(name, options, arguments) {
// ...
}
// good
function foo(name, options, args) {
// ...
}
- ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ชจ๋ ํจ์๋ ์๋ฌต์ ์ผ๋ก ๋ด์ฅ ๊ฐ์ฒด
arguments
๋ฅผ ๊ฐ๋๋ค.
(์ด ๊ฐ์ฒด์๋ ํจ์๋ก ์ ๋ฌ๋ ๋ชจ๋ ์ธ์๊ฐ ๋ฐฐ์ด ํํ๋ก ์ ์ฅ๋์ด ์๋ค.) - ๊ทธ๋ฐ๋ฐ ๋งค๊ฐ๋ณ์ ์ด๋ฆ์
arguments
๋ก ์ง์ ํ๋ฉด, ๋ด์ฅarguments
๊ฐ์ฒด๋ฅผ ๋ฎ์ด์จ๋ฒ๋ ค ์ ๊ทผ์ด ๋ถ๊ฐ๋ฅํด์ง๋ค. - ๋๋ฒ๊น ์ ์ด๋ ต๊ฒ ๋ง๋ค๊ณ , ๋ด๋ถ ๋ก์ง์์ ์๋์น ์์ ๋์์ ์ผ์ผํฌ ์ ์๋ค.
๋ฐ๋ผ์, args
๋ params
์ฒ๋ผ ์๋ฏธ ์๋ ๋ค๋ฅธ ์ด๋ฆ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์์ ํ๋ค.
6. arguments
๋์ Rest ๋ฌธ๋ฒ(...) ์ฌ์ฉ โ
eslint: prefer-rest-params
// bad
function concatenateAll() {
const args = Array.prototype.slice.call(arguments);
return args.join('');
}
// good
function concatenateAll(...args) {
return args.join('');
}
arguments
๋ ๋ฐฐ์ด์ด ์๋ ์ ์ฌ ๋ฐฐ์ด ๊ฐ์ฒด์ด๋ค.- ๋ฐ๋ฉด
...args
๋ ์ง์ง ๋ฐฐ์ด๋ก ์์ฑ๋๋ฏ๋ก, ์ฆ์ ๋ฐฐ์ด ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค. - ๋ํ
rest ๋ฌธ๋ฒ
์ ์ฌ์ฉํ๋ฉด ๋ช ์์ ์ผ๋ก ์ด๋ค ์ธ์๋ค์ ๋ชจ์ผ๋์ง ํํํ ์ ์์ด, ์ฝ๋์ ๊ฐ๋ ์ฑ๊ณผ ์๋ ์ ๋ฌ๋ ฅ์ด ํจ์ฌ ๋์์ง๋ค. arguments
๋ ๊ณผ๊ฑฐ ํธํ์ฑ ๋๋ฌธ์ ๋จ์ ์๋ ๊ตฌ๋ฌธ์ด๊ณ , ํ๋ ์๋ฐ์คํฌ๋ฆฝํธ์์๋rest parameters
๊ฐ ๋์ฒดํ๋ค.
7. ํจ์ ์ธ์๋ฅผ ์์ ํ์ง ๋ง๊ณ ๊ธฐ๋ณธ ๋งค๊ฐ๋ณ์(default) ์ฌ์ฉ โ
// really bad
function handleThings(opts) {
// ์ธ์๋ฅผ ์ง์ ๋ณ๊ฒฝํ๋ฉด ์๋ณธ ์ฐธ์กฐ๋ฅผ ์ค์ผ์ํฌ ์ ์๋ค.
// ๋ ์ ์ข์ ๊ฒฝ์ฐ: opts๊ฐ falsy์ผ ๋ {}๋ก ๋ฎ์ด์จ์
// ์๊ธฐ์น ๋ชปํ ๋ฒ๊ทธ๋ฅผ ์ผ์ผํฌ ์ ์๋ค.
opts = opts || {};
// ...
}
// still bad
function handleThings(opts) {
if (opts === void 0) {
opts = {};
}
// ...
}
// good
function handleThings(opts = {}) {
// ์์ ํ๊ณ ์๋๊ฐ ๋ช
ํํ ๊ธฐ๋ณธ๊ฐ ์ค์
}
- ์ธ์๋ฅผ ์ง์ ์์ ํ๋ฉด ์๋ ํธ์ถ๋ถ์์ ์ ๋ฌ๋ ๊ฐ์ฒด๋ ๊ฐ์ด ์์์น ๋ชปํ๊ฒ ์ฌ์ด๋ ์ดํํธ๊ฐ ๋ฐ์ํ ์ ์๋ค.
- ๊ธฐ๋ณธ ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ๋ฉด ํจ์๊ฐ ํธ์ถ๋ ๋ ํ ๋ฒ๋ง ์์ ํ๊ฒ ๊ธฐ๋ณธ๊ฐ์ ์ด๊ธฐํํ๋ฏ๋ก, ์ฝ๋๊ฐ ๋ ์์ธก ๊ฐ๋ฅํ๊ณ ์ ์ธ์ ์ด ๋๋ค.
8. ์ฌ์ด๋ ์ดํํธ๊ฐ ์๋ ๊ธฐ๋ณธ ๋งค๊ฐ๋ณ์๋ ํผํ๊ธฐ โ
var b = 1;
// bad
function count(a = b++) {
console.log(a);
}
count(); // 1
count(); // 2
count(3); // 3
count(); // 3
- ๊ธฐ๋ณธ ๋งค๊ฐ๋ณ์๋ ์์ ์ ์ธ ์ด๊ธฐ๊ฐ์ ์ค์ ํ๊ธฐ ์ํ ๊ฒ์ด์ง, ์คํ ์์ ๋ง๋ค ๋ณํ๋ ๊ฐ์ ๊ณ์ฐํ๋ ๊ณณ์ด ์๋๋ค.
- ์ ์์์ฒ๋ผ
b++
๊ณผ ๊ฐ์ด ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ ํํ์์ ๋ฃ์ผ๋ฉด ํธ์ถ ์์๋ ์ธ์ ์ ๋ฌด์ ๋ฐ๋ผ ๋ค๋ฅธ ๊ฒฐ๊ณผ๊ฐ ๋์ ์์ธก ๊ฐ๋ฅ์ฑ์ด ๋จ์ด์ง๋ค. - ๊ธฐ๋ณธ๊ฐ์ ํญ์ ๊ณ ์ ๋ ์์๋ ์์ํ ํํ์์ ์ฌ์ฉ
9. ๊ธฐ๋ณธ ๋งค๊ฐ๋ณ์๋ ํญ์ ๋ค์ โ
eslint: default-param-last
// bad
function handleThings(opts = {}, name) {
// ...
}
// good
function handleThings(name, opts = {}) {
// ...
}
- ๋งค๊ฐ๋ณ์ ์์๋ฅผ ์์ธก ๊ฐ๋ฅํ๊ฒ ์ ์งํ๋ค.
10. Function
์์ฑ์ ์ฌ์ฉ ๊ธ์ง โ
eslint: no-new-func
// bad
var add = new Function('a', 'b', 'return a + b');
// still bad
var subtract = Function('a', 'b', 'return a - b');
- Function ์์ฑ์๋ ๋ฌธ์์ด์ ๋ฐ์ ๋ฐํ์์ ์ ํจ์๋ฅผ ์์ฑํ๋ค. ๋ด๋ถ์ ์ผ๋ก
eval()
์ฒ๋ผ ๋์ํ๋ฏ๋ก ๋ณด์ ์ทจ์ฝ์ , ๋๋ฒ๊น /์ฑ๋ฅ ๋ฌธ์ , ์ค์ฝํ ์ฐจ์ด ๋ฑ์ ์ด์ ๋ก ์ฌ์ฉ์ ๊ธ์งํ๋ค.
11. ํจ์ ์๊ทธ๋์ฒ์ ๊ณต๋ฐฑ ์ถ๊ฐ โ
eslint: space-before-function-paren space-before-blocks
// good
const x = function () {};
const y = function a() {};
- ๊ณต๋ฐฑ์ ์ผ๊ด๋๊ฒ ์ ์งํ๋ฉด ํจ์ ์ด๋ฆ ์ถ๊ฐยท์ญ์ ์ ์์ ๋ฒ์๊ฐ ์ต์ํ๋๋ค.
12. ๋งค๊ฐ๋ณ์๋ฅผ ์์ ํ์ง ๋ง์ธ์ โ
eslint: no-param-reassign
// bad
// f1 ํจ์๋ ์ธ์๋ก ๋ฐ์ ๊ฐ์ฒด์ ์์ฑ์ ์ง์ ๋ฐ๊พผ๋ค.
function f1(obj) {
obj.key = 1;
}
// good
// f2๋ ์ ๋ฌ๋ obj๋ฅผ ์์ ํ์ง ์๋๋ค. ๊ฐ์ฒด ์์ key๊ฐ ์กด์ฌํ๋์ง ์ฝ๊ธฐ๋ง ํ๋ค.
function f2(obj) {
const key = Object.prototype.hasOwnProperty.call(obj, 'key') ? obj.key : 1;
}
- ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌ๋ ๊ฐ์ฒด๋ฅผ ์กฐ์ํ๋ฉด ์๋ ํธ์ถ์ฒ์์ ์์น ์๋ ์ฌ์ด๋์ดํํธ๋ฅผ ์ผ์ผํฌ ์ ์๋ค.
13. ๋งค๊ฐ๋ณ์๋ฅผ ์ฌํ ๋นํ์ง ๋ง์ธ์ โ
eslint: no-param-reassign
// bad
// ๋งค๊ฐ๋ณ์ a๋ฅผ ํจ์ ๋ด๋ถ์์ ์ง์ ์ฌํ ๋นํจ
// โ ์๋ ์ธ์ ๊ฐ์ด ๋ฎ์ด์จ์ง๊ณ , ์์ธก ๋ถ๊ฐ๋ฅํ ๋์์ ์ด๋ํ๋ค.
function f1(a) {
a = 1; // ๋งค๊ฐ๋ณ์ a๋ฅผ ๊ฐ์ ๋ก 1๋ก ๋ฐ๊ฟ
// ...
}
// falsy ๊ฐ์ด ๋ค์ด์ค๋ฉด a๋ฅผ 1๋ก ๋ฐ๊ฟ๋ฒ๋ฆผ
// โ ํธ์ถ๋ถ ์
์ฅ์์๋ ํจ์๊ฐ ๋ด๋ถ์ ์ผ๋ก ์ธ์๋ฅผ ๋ฐ๊พธ๋ ๊ฒ์ ์์ํ๊ธฐ ์ด๋ ต๋ค.
function f2(a) {
if (!a) {
a = 1; // ์๋ก์ด ๊ฐ์ผ๋ก ๋ฎ์ด์
}
// ...
}
// good
// ๋งค๊ฐ๋ณ์๋ฅผ ๊ทธ๋๋ก ๋๊ณ , ์๋ก์ด ๋ณ์ b์ ๊ธฐ๋ณธ๊ฐ์ ์ ์ฉ
// โ ์๋ณธ a๋ ์ ์ง๋๋ฉฐ, ๋ถ๋ณ์ฑ ๋ณด์ฅ
function f3(a) {
const b = a || 1;
// ...
}
// ๊ธฐ๋ณธ ๋งค๊ฐ๋ณ์ ๋ฌธ๋ฒ ์ฌ์ฉ
// โ ํจ์ ์ ์ธ๋ถ์์ ๊ธฐ๋ณธ๊ฐ์ ์ง์ ํด ์ฌํ ๋น ๋ก์ง ์์ฒด๋ฅผ ์ ๊ฑฐ
function f4(a = 1) {
// ...
}
- ํจ์ ๋ด๋ถ์์ ์ฌํ ๋นํ๋ฉด, ์ธ๋ถ์์ ์ ๋ฌ๋ ์๋ ์ธ์ ์๋ฏธ๊ฐ ์ฌ๋ผ์ง๋ค.
- ํนํ
arguments
๊ฐ์ฒด๋ ์ต์ ํ ์์ง(V8 ๋ฑ)์ ๋ถ์ ์ ์ธ ์ํฅ์ด ์๋ค.
14. ๊ฐ๋ณ ์ธ์ ํจ์ ํธ์ถ ์ ์ ๊ฐ ์ฐ์ฐ์ ...
์ฌ์ฉ โ
eslint: prefer-spread
// bad
const x = [1, 2, 3, 4, 5];
console.log.apply(console, x);
// good
const x = [1, 2, 3, 4, 5];
console.log(...x);
// bad
new (Function.prototype.bind.apply(Date, [null, 2016, 8, 5]))();
// good
new Date(...[2016, 8, 5]);
- ์คํ ์ปจํ
์คํธ๋ฅผ ๋ฐ๋ก ์ง์ ํ ํ์๊ฐ ์๊ณ ,
new
์apply()
๋ฅผ ํจ๊ป ์ฐ๊ธฐ ์ด๋ ต๊ธฐ ๋๋ฌธ์ด๋ค.
๐งฉ apply()
๋ ์๋ ์ ์ผ์๊น?
apply()
๋ ํจ์์ ๋ฐฐ์ด ํํ์ ์ธ์๋ค์ ํ๋์ฉ ํ์ด์ ์ ๋ฌํ ๋ ์ฐ๋ ์๋ ๋ฐฉ์์ด๋ค.
const nums = [1, 2, 3];
Math.max.apply(null, nums); // ์ต๋๊ฐ 3
- ์ฒซ ๋ฒ์งธ ์ธ์: ์คํ ์ปจํ ์คํธ(this)
- ๋ ๋ฒ์งธ ์ธ์: ์ธ์ ๋ฆฌ์คํธ (๋ฐฐ์ด ๋๋ ๋ฐฐ์ด ์ ์ฌ ๊ฐ์ฒด)
์ฆ, apply()
๋ this ์ง์
, ๋ฐฐ์ด์ ์ธ์๋ก ํผ์ณ์ ์ ๋ฌ
๋ ์ญํ ์ ๋์์ ํ๋ค.
...
์ ๊ฐ ์ฐ์ฐ์๊ฐ ์์ด์ ํจ์ฌ ๊ฐ๋จํด์ก๋ค.
const nums = [1, 2, 3];
// good
Math.max(...nums); // 3
...nums
๋ ๋ฐฐ์ด์ ์๋์ผ๋ก ํผ์ณ์ค- this๋ฅผ ๋ณ๋๋ก ์ง์ ํ ํ์๊ฐ ์์
- ๊ฐ๋ ์ฑ, ๊ฐ๊ฒฐํจ, ๋๋ฒ๊น ๋ชจ๋ ์ด ๋ฐฉ์์ด ํจ์ฌ ์ฐ์
apply()๋ ํนํ new์ ํจ๊ป ์ธ ์ ์๋ค.
// new + apply()๋ ์๋ํ์ง ์์
const args = [2016, 8, 5];
new Date.apply(null, args); // TypeError ๋ฐ์
apply()
๋ ์ผ๋ฐ ํจ์ ํธ์ถ์ ํ๋ด๋ด๋ ๋ฉ์๋๋ผ์, ์์ฑ์ ํธ์ถ(new)๊ณผ๋ ํธํ๋์ง ์๋๋ค. ์ฆ, ๋ฐฐ์ด์ ์ธ์๋ก ๋ฐ์์ ์ธ์คํด์ค๋ฅผ ๋ง๋ค๊ธฐ๊ฐ ๋ถ๊ฐ๋ฅํด์ก๋ค.
์ ๊ฐ ์ฐ์ฐ์๋ ์ด๋ฐ ํ๊ณ๋ฅผ ํด๊ฒฐ
const args = [2016, 8, 5];
const date = new Date(...args); // ๋์
- ์ ๊ฐ ์ฐ์ฐ์๋ ์์ฑ์ ํธ์ถ์์๋ ๋์ํ๋ค.
apply()
์ฒ๋ผFunction.prototype.bind
๋ฅผ ์ต์ง๋ก ์ธ ํ์๊ฐ ์๋ค.
๊ตฌ๋ถ | ์์ | ํน์ง |
---|---|---|
apply() | console.log.apply(console, arr) | this๋ฅผ ์ง์ ํด์ผ ํจ, new ๋ถ๊ฐ๋ฅ |
์ ๊ฐ ์ฐ์ฐ์ | console.log(...arr) | ๊ฐ๊ฒฐ, ์์ , new ๋ ๊ฐ๋ฅ |
๋ณต์กํ ๋ฐฉ์ | new (Function.prototype.bind.apply(Date, [null, 2016, 8, 5]))() | ๋ถํ์ํ๊ฒ ๋ณต์กํจ |
๊น๋ํ ๋ฐฉ์ | new Date(...[2016, 8, 5]) | ์ฝ๊ธฐ ์ฝ๊ณ ํ์ค์ ์ธ ์ฝ๋ |
์ ๊ฐ ์ฐ์ฐ์(...)
๋ ํ๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ํ์ค์ ์ธ ์ธ์ ์ ๋ฌ ๋ฐฉ์์ด๋ค.apply()
๋ณด๋ค ์งง๊ณ ๋ช
ํํ๋ฉฐ, new
์๋ ํธํ๋๋ฏ๋ก ์ผ๊ด๋ ๋ฌธ๋ฒ์ ์ ์งํ ์ ์๋ค.
15. ์ฌ๋ฌ ์ค ํจ์ ํธ์ถ์ ํญ๋ชฉ๋ณ๋ก ํ ์ค์ฉ ์ ๋ ฌ โ
eslint: function-paren-newline
- ์ฌ๋ฌ ์ค์ ๊ฑธ์น ํจ์ ์๊ทธ๋์ฒ๋ ํธ์ถ์ ๋ฐฐ์ด, ๊ฐ์ฒด ๋ฑ ๋ค๋ฅธ ๋ฉํฐ๋ผ์ธ ๋ฆฌ์คํธ์ ๋์ผํ๊ฒ
๊ฐ ์ธ์๋ฅผ ํ ์ค์ฉ ๋ฐฐ์น
ํ๋ค. - ๋ค์ฌ์ฐ๊ธฐ๋ฅผ ์ผ๊ด๋๊ฒ ๋ง์ถ๊ณ , ํจ์ ์ธ์์๋ ํธ๋ ์ผ๋ง ์ฝค๋ง
,
๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค. - ์ธ์๊ฐ ์งง๊ฑฐ๋ ๊ฐ๋จํ ๊ฒฝ์ฐ ํ ์ค๋ก ์์ฑํด๋ ๋๋ค.