μ½λλΈλ μμ μμ±λ νΉμ νλμ νΈμΆλμ΄ νλλ‘ νλ κ°μ²΄μ΄λ€. λλ μΌλ ¨μ κ³Όμ μ λ¬ΈμΌλ‘ ꡬννκ³ μ½λ λΈλ‘μΌλ‘ κ°μΈμ νλμ μ€ν λ¨μλ‘ μ μν κ²μ΄λ€.
ν¨μλ ν¨μ μ μ(function definition)μ ν΅ν΄ μμ±νλ©°, μΈμ(argument)λ₯Ό 맀κ°λ³μλ₯Ό ν΅ν΄ ν¨μμ μ λ¬νλ©΄μ ν¨μμ μ€νμ λͺ
μμ μΌλ‘ μ§μν΄ ν¨μ νΈμΆ(function call/invoke)ν μ μλ€.
ν¨μλ μ½λμ λ°λ³΅μ μ€μ΄κ³ , μ¬νμ©νκΈ° μν΄μ μ¬μ©νλ€. μ΄λ₯Ό ν΅ν΄ μ μ§λ³΄μμ νΈμμ±μ λμ΄κ³ μ€μλ₯Ό μ€μ¬ μ½λμ μ λ’°μ±μ λμΌ μ μλ€.
ν¨μλ ν¨μ μ μλ₯Ό ν΅ν΄ μμ±νκ³ , ν¨μ νΈμΆ ν΅ν΄ μ€νν μ μλ€κ³ νλ€. λ¨Όμ ν¨μ μ μλ₯Ό μ΄λ€ λ°©λ²μ ν΅ν΄ ν μ μλμ§ μ΄ν΄ 보μ. ν¨μλ ν¨μ 리ν°λ΄, ν¨μ μ μΈλ¬Έ, ν¨μ ννμ, Function μμ±μ ν¨μ, νμ΄ν ν¨μλ‘ μ μν μ μλ€. (Function μμ±μ ν¨μλ μΌλ°μ μΈ λ°©λ²λ μλκ³ , λ°λμ§ν λ°©λ²λ μλκΈ° λλ¬Έμ μλ΅νλλ‘ νκ² λ€)
μλμμ κ°κ°μ λν΄ μμΈν μ΄ν΄λ³΄μ.
μλ°μ€ν¬λ¦½νΈμ ν¨μλ κ°μ²΄ νμ μ κ°μ΄λ€. λ°λΌμ ν¨μλ ν¨μ 리ν°λ΄λ‘ μμ±ν μ μλ€. μ½λλ₯Ό ν΅ν΄ λ¬Έλ²μ μ΄ν΄λ³΄κ³ , ν¨μ 리ν°λ΄μ΄ 무μμΌλ‘ ꡬμ±λλμ§ μμ보μ.
const add = function add(x, y) {
return x + y;
}
// function add μμ addκ° ν¨μ μ΄λ¦μ΄λ€.
// function add(x, y) μμ (x, y)κ° λ§€κ°λ³μ λͺ©λ‘μ΄λ€.
// {} λ΄λΆκ° ν¨μ λͺΈμ²΄μ΄λ€
ν¨μ 리ν°λ΄μ ν¨μ μ΄λ¦, 맀κ°λ³μ λͺ©λ‘, ν¨μ λͺΈμ²΄λ‘ μ΄λ£¨μ΄μ Έ μλ€. ν¨μ μ΄λ¦μ ν¨μ λ΄μμλ§ μ°Έμ‘°ν μ μκ³ , μλ΅κ°λ₯νλ€. ν¨μ 리ν°λ΄μ κ°μΌλ‘ (κ°μ²΄ νμ μ κ°)μΌλ‘ νκ°λκΈ° λλ¬Έμ λ³μμ ν λΉν μ μλ€.
ν¨μ μ΄λ¦μ ν¨μ λ΄μμλ§ μ°Έμ‘°ν μ μλ€λ μ΄κ² λ¬΄μ¨ μ릴κΉ?
μ΄λ ν¨μ λͺΈμ²΄ μΈλΆμμλ ν¨μ μ΄λ¦μΌλ‘ ν¨μλ₯Ό μ°Έμ‘°ν μ μμΌλ―λ‘ ν¨μ λͺΈμ²΄ μΈλΆμμλ ν¨μ μ΄λ¦μΌλ‘ ν¨μλ₯Ό νΈμΆν μ μλ€λ μλ―Έμ΄λ€.κ·Έλ¬λ μ°λ¦¬λ ν¨μ μΈλΆμμ ν¨μλ₯Ό νΈμΆν μ μμΌλ μ΄μνλ€.
μ΄ μλ¬Έμ κ·Έλλ‘ κ°μ§νκ³ μλ€κ° μλ ν¨μ μ μΈλ¬Έμ μ΄ν΄λ³΄λ©΄μ ν΄κ²°ν΄λ³΄μ.
ν¨μ μ μΈλ¬Έμ ν¨μ 리ν°λ΄κ³Ό ννκ° λμΌνλ€. κ·Έλ¬λ, ννλ λμΌνμ§λ§ λ€λ₯Έ νΉμ§μ΄ μλ€.
κ·Έλ¬λ, μ΄λ¦μ΄ μλ΅λμ§ μμ κΈ°λͺ
ν¨μ 리ν°λ΄μ κ²½μ° ν¨μ μ μΈλ¬Έκ³Ό ννκ° μμ ν λμΌνκΈ°λλ¬Έμ ν¨μ μ μΈλ¬Έκ³Ό ꡬλΆν μ μλ€. μ΄λ₯Ό μλ°μ€ν¬λ¦½νΈ μμ§μ μ΄λ»κ² ꡬλΆν κΉ?
μλ°μ€ν¬λ¦½νΈ μμ§μ λ¬Έλ§₯μ λ°λΌμ μ΄λ₯Ό ꡬλΆνλ€. {}
λ₯Ό μ½λλΈλμΌλ‘ λ³Ό κ²μ΄λ, κ°μ²΄ 리ν°λ΄λ‘ λ³Ό κ²μ΄λλ {}
κ° λ¨λ
μΌλ‘ μλ λ¬Έλ§₯μμλ μ½λλΈλμΌλ‘, {}
κ° νΌμ°μ°μλ‘ μ‘΄μ¬νλ λ¬Έλ§₯μμλ κ°μ²΄ 리ν°λ΄λ‘ νκ°νλ€.
μλμ μμ μ½λλ‘ μ’ λ μ΄ν΄λ³΄μ.
// κ°μΌλ‘ νκ°λμ΄ λ³μμ ν λΉλλ€ === ν¨μ 리ν°λ΄λ‘ μλ°μ€ν¬λ¦½νΈ μμ§μ΄ ν΄μ
const add = function add(x, y) {
return x + y;
}
// λ¨λ
μΌλ‘ μ¬μ©λλ€ === ν¨μ μ μΈλ¬ΈμΌλ‘ μλ°μ€ν¬λ¦½νΈ μμ§μ΄ ν΄μ
function add(x, y) {
return x + y;
}
νΉμ μμμ ν¨μ μ΄λ¦μΌλ‘ ν¨μλ₯Ό νΈμΆν μ μλ€κ³ νλ μκΈ°κ° κΈ°μ΅λλκ°?
μ΄μ μλ¬Έμ ν΄κ²°ν μκ°μ΄λ€. λ¨Όμ μλμ μ½λλ₯Ό 보μ.
function foo() {
console.log('foo');
}
foo(); // foo
μ°λ¦¬λ foo
λΌλ μ΄λ¦μ ν΅ν΄ foo
ν¨μλ₯Ό νΈμΆν μ μμλ€. μ΄λ»κ² λ μΌμΌκΉ? μ¬μ€ μ°λ¦¬λ ν¨μ μ΄λ¦ foo
λ₯Ό ν΅ν΄μ ν¨μλ₯Ό νΈμΆν κ²μ΄ μλλ€. foo
λ μλ°μ€ν¬λ¦½νΈ μμ§μ΄ μ묡μ μΌλ‘ μμ±ν μλ³μλ€. ν¨μ μ΄λ¦μ ν¨μ λͺΈμ²΄ λ΄μμλ§ μ°Έμ‘°ν μ μμΌλ―λ‘, μλ°μ€ν¬λ¦½νΈ μμ§μ μμ±λ ν¨μλ₯Ό νΈμΆνκΈ° μν΄ ν¨μ μ΄λ¦κ³Ό λμΌν μ΄λ¦μ μλ³μλ₯Ό μ묡μ μΌλ‘ μμ±νκ³ , κ±°κΈ°μ ν¨μ κ°μ²΄λ₯Ό ν λΉνλ€.
μ¦, ν¨μλ ν¨μ μ΄λ¦μ΄ μλ ν¨μ κ°μ²΄λ₯Ό κ°λ¦¬ν€λ μλ³μλ‘ νΈμΆνλ€.
μμμ ν¨μ 리ν°λ΄μ μ΄ν΄λ³΄λ©΄μ μ΄λ° μ½λλ₯Ό λ³Έ μ μ΄ μλ€.
const add = function add(x, y) {
return x + y;
}
μλ°μ€ν¬λ¦½νΈμ ν¨μλ κ°μ²΄ νμ
μ κ°μ΄λ€. μ΄μ²λΌ κ°μ μ±μ§μ κ°λ κ°μ²΄λ₯Ό μΌκΈ κ°μ²΄λΌκ³ νλλ°, μλ°μ€ν¬λ¦½νΈμ ν¨μλ μΌκΈ κ°μ²΄μ΄λ―λ‘ ν¨μλ₯Ό κ°μ²λΌ μμ λ‘κ² μ¬μ©ν μ μλ€. ν¨μλ μΌκΈ κ°μ²΄μ΄λ―λ‘ ν¨μ 리ν°λ΄λ‘ μμ±ν ν¨μ κ°μ²΄λ₯Ό λ³μμ ν λΉν μ μλ€. (μΌκΈ κ°μ²΄μ λν΄μλ μλμμ λ μμΈν λ€λ£° μμ μ΄λ€.)
μ΄λ¬ν ν¨μ μ μ λ°©μμ ν¨μ ννμ(function expression)μ΄λΌ νλ€.
const add = function (x, y) {
return x + y;
}
λ³΄ν΅ ν¨μ ννμμΌλ‘ ν¨μλ₯Ό ννν λ μ μ½λμ κ°μ΄ ν¨μ μ΄λ¦μ μλ΅νλ κ²μ΄ μΌλ°μ μ΄λ€.
ES6μμ λμ λ νμ΄ν ν¨μ(arrow function)μ function ν€μλ λμ νμ΄ν(fat arrow) β λ₯Ό μ¬μ©ν΄ μ’ λ κ°λ΅ν λ°©λ²μΌλ‘ ν¨μλ₯Ό μ μΈν μ μλ€.
const add = (x, y) => x + y;
const multiply = (x, y) => {
return x * y;
}
console.log(add(2, 5)); // 7
console.log(multiply(2, 5)); // 10
//νμ΄ν ν¨μλ νμ μ΅λͺ
ν¨μλ‘ μ μνλ€.
νμ΄ν ν¨μλ κΈ°μ‘΄μ ν¨μ μ μΈλ¬Έ λλ ν¨μ ννμκ³Ό λ€λ₯Έ νΉμ§μ κ°μ§λ€. μ§κΈμ μ΄λ»κ² μ μνλμ§λ§ μμλ³΄κ³ μλμμ ES6 ν¨μμ μΆκ° κΈ°λ₯μ μ΄ν΄λ³΄λ©° νμ΄ν ν¨μμ λν΄ λ μμΈν λ€λ€λ³΄λλ‘ νμ.
ν¨μλ ν¨μλ₯Ό κ°λ¦¬ν€λ μλ³μμ ν μμ μκ΄νΈμΈ ν¨μ νΈμΆ μ°μ°μλ‘ νΈμΆνλ€. ν¨μ νΈμΆ μ°μ°μ λ΄μλ 0κ° μ΄μμ μΈμλ₯Ό μΌνλ‘ κ΅¬λΆν΄μ λμ΄νλ€. ν¨μ νΈμΆμ ννμμ΄κΈ° λλ¬Έμ return ν€μλκ° λ°νν ννμμ νκ° κ²°κ³ΌμΈ λ°νκ°μΌλ‘ νκ°λλ€. (λͺ μμ μΌλ‘ returnλ¬Έμ μ§μ νμ§ νμ§ μμΌλ©΄ undefinedλ₯Ό λ°ννλ€.)
// ν¨μ μ μ
function add(x, y) {
return x + y;
}
// ν¨μ νΈμΆ
const result = add(1, 2);
// μΈμ 1,2κ° λ§€κ°λ³μ x,yμ μμλλ‘ ν λΉλλ€.
// κ·Έ μ΄ν ν¨μ λͺΈμ²΄μ λ¬Έλ€μ΄ μ€νλλ€.
맀κ°λ³μλ ν¨μλ₯Ό μ μν λ μ μΈνλ©°, ν¨μ λͺΈμ²΄ λ΄λΆμμ λ³μμ λμΌνκ² μ·¨κΈλλ€. μ¦, ν¨μκ° νΈμΆλλ©΄ ν¨μ λͺΈμ²΄ λ΄μμ μ묡μ μΌλ‘ 맀κ°λ³μκ° μμ±λκ³ undefinedλ‘ μ΄κΈ°νλ μ΄ν μΈμκ° μμλλ‘ ν λΉλλ€. 맀κ°λ³μλ ν¨μ λͺΈμ²΄ λ΄λΆμμλ§ μ°Έμ‘°ν μ μλ€.
μλ°μ€ν¬λ¦½νΈμ ν¨μλ ν¨μκ° νΈμΆλ λ, 맀κ°λ³μμ κ°μμ μΈμκ° μΌμΉνλμ§ μ²΄ν¬νμ§ μλλ€.
function add(x, y) {
console.log(x);
console.log(y);
console.log(arguments);
return x + y;
}
console.log(add(2));
// 2
// undefined
// Arguments(1) [2, callee: f, Symbol(Symbol.iterator): f]
console.log(add(2,5,10)
// 2
// 5
// Arguments(3) [2, 5, 10, callee: f, Symbol(Symbol.iterator): f]
μ μ½λμ²λΌ μΈμκ° λͺ¨μλΌ λ§€κ°λ³μμ μ λ¬λμ§ μμ κ²½μ°, 맀κ°λ³μμ κ°μ undefinedκ° λλ€. μΈμκ° λ§€κ°λ³μλ³΄λ€ λ§μ κ²½μ° λ¬΄μλκ³ , μ묡μ μΌλ‘ arguments κ°μ²΄μ νλ‘νΌν°λ‘ 보κ΄λλ€.
λ€μκ³Ό κ°μ 쑰건μ λ§μ‘±νλ κ°μ²΄λ₯Ό μΌκΈ κ°μ²΄λΌ νλ€.
ν¨μλ μ΄λ―Έ μμμ μκΈ°νμ§λ§ μ λͺ¨λ κ²μ΄ κ°λ₯ν μΌκΈ κ°μ²΄μ΄λ€.
ν¨μλ κ°μ²΄μ΄λ―λ‘ νλ‘νΌν°λ₯Ό κ°μ§ μ μλ€. ν¨μ κ°μ²΄κ° κ°μ§κ³ μλ νλ‘νΌν°λ₯Ό μμ 보μ.
ν¨μ κ°μ²΄μλ arguments
, caller
, length
, name
, prototype
, __proto__
νλ‘νΌν°κ° μλ€.
ν¨μμ λͺ¨λ νλ‘νΌν°μ νλ‘νΌν° μ΄νΈλ¦¬λ·°νΈλ₯Ό νμΈν΄λ³΄λ©΄ λ€μκ³Ό κ°λ€.
function square(number) {
return number * number;
}
console.log(Object.getOwnPropertyDescriptors(square));
/*
{
length: {value: 1, writable: false, enumerable: false, configurable: true},
name: {value: "square", writable: false, enumerable: false, configurable: true},
arguments: {value: null, writable: false, enumerable: false, configurable: false},
caller: {value: null, writable: false, enumerable: false, configurable: false},
prototype: {value: {...}, writable: true, enumerable: false, configurable: false},
}
*/
// __proto__λ Object.prototype κ°μ²΄μ μ κ·Όμ νλ‘νΌν°μ΄λ€.
// square ν¨μλ Object.prototype κ°μ²΄λ‘λΆν° __proto__ μ κ·Όμ νλ‘νΌν°λ₯Ό μμλ°λλ€.
ν¨μ κ°μ²΄μ arguments νλ‘νΌν° κ°μ arguments κ°μ²΄λ€. arguments κ°μ²΄λ ν¨μ νΈμΆ μ μ λ¬λ μΈμ(arguments)λ€μ μ 보λ₯Ό λ΄κ³ μλ μν κ°λ₯ν μ μ¬ λ°°μ΄ κ°μ²΄(array-like object)μ΄λ€. arguments νλ‘νΌν°λ ν¨μ λ΄λΆμμλ§ μ§μ λ³μμ²λΌ μ°Έμ‘°ν μ μλ€.
ν¨μ κ°μ²΄μ arguments νλ‘νΌν°λ ES3λΆν° νμ€μμ νμ§λμμΌλ―λ‘ Function.argumentsμ κ°μ μ¬μ©λ²μ κΆμ₯λμ§ μμΌλ©° ν¨μ λ΄λΆμμ μ§μ λ³μμ²λΌ μ¬μ©ν μ μλ arguments κ°μ²΄λ₯Ό μ°Έμ‘°νλλ‘ νμ.
μ μΈλ 맀κ°λ³μμ κ°μμ ν¨μλ₯Ό νΈμΆν λ μ λ¬νλ μΈμμ κ°μλ₯Ό νμΈνμ§ μλ μλ°μ€ν¬λ¦½νΈμ νΉμ± λλ¬Έμ ν¨μκ° νΈμΆλλ©΄ μΈμ κ°μλ₯Ό νμΈνκ³ μ΄μ λ°λΌ ν¨μμ λμμ λ¬λ¦¬ μ μν νμκ° μμ μ μλ€. μ΄ λ μ μ©νκ² μ¬μ©λλ κ²μ΄ arguments κ°μ²΄λ€.
arguments κ°μ²΄λ 맀κ°λ³μ κ°μλ₯Ό νμ ν μ μλ κ°λ³ μΈμ ν¨μλ₯Ό ꡬνν λ μ μ©νλ€.
function sum() {
let result = 0;
for (let i = 0; i < arguments.length; i++) {
result += arguments[i];
}
return result;
}
console.log(sum()); // 0
console.log(sum(1,3,4)); // 8
ν¨μ κ°μ²΄μ caller νλ‘νΌν°λ ν¨μ μμ μ νΈμΆν ν¨μλ₯Ό κ°λ¦¬ν¨λ€. λΉνμ€ νλ‘νΌν°μ΄λ©° νμ€νλ μμ λ μμΌλ―λ‘ μ¬μ©νμ§ λ§κ³ μμλ§ λμ.
ν¨μ κ°μ²΄μ length νλ‘νΌν°λ ν¨μλ₯Ό μ μν λ μ μΈν 맀κ°λ³μμ κ°μλ₯Ό κ°λ¦¬ν¨λ€.
ν¨μ κ°μ²΄μ name νλ‘νΌν°λ ν¨μ μ΄λ¦μ λνλΈλ€. name νλ‘νΌν°λ ES6μμ μ μ νμ€μ΄ λμλλ°, ES5μ ES6μμμ λμμ΄ λ€λ₯΄λ€. μ΅λͺ ν¨μ ννμμμ name νλ‘νΌν°μ κ²½μ°, ES5μμλ λΉ λ¬Έμμ΄μ κ°μΌλ‘ κ°κ³ , ES6μμλ ν¨μ κ°μ²΄λ₯Ό κ°λ¦¬ν€λ μλ³μλ₯Ό κ°μΌλ‘ κ°λλ€.
__proto__
μ κ·Όμ νλ‘νΌν°μ΄λ―Έ μλ°μ€ν¬λ¦½νΈμ Prototypeμμ νμ°Έμ μ€λͺ νμΌλ μ€λͺ νμ§ μκ² λ€.
μ΄λ―Έ μλ°μ€ν¬λ¦½νΈμ Prototypeμμ νμ°Έμ μ€λͺ νμΌλ μ€λͺ νμ§ μκ² λ€.
ES6 μ΄μ μ ν¨μλ λμΌν ν¨μλΌλ λ€μν ννλ‘ νΈμΆν μ μμλ€. μΌλ°μ μΈ ν¨μλ‘λ νΈμΆν μ μκ³ , new μ°μ°μμ ν¨κ» νΈμΆνμ¬ μμ±μ ν¨μλ‘μ νΈμΆν μ μμΌλ©°, κ°μ²΄μ λ°μΈλ©λμ΄ λ©μλλ‘μ νΈμΆν μλ μμλ€. ES6 μ΄μ μ λͺ¨λ ν¨μλ callable μ΄λ©΄μ constructorμ΄λ€. constructorλ prototype νλ‘νΌν°λ₯Ό κ°μ§λ©° νλ‘ν νμ κ°μ²΄λ₯Ό μμ±νλ€. μ΄λ μ€μλ₯Ό μ λ°ν μ μμΌλ©° μ±λ₯λ©΄μμλ μν΄λ€.
μ΄λ¬ν λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄ ES6μμλ ν¨μλ₯Ό μ¬μ© λͺ©μ μ λ°λΌ μΈ κ°μ§ μ’ λ₯λ‘ λͺ νν ꡬλΆνλ€. μλμμ κ°κ°μ λν΄μ λ μμΈν μμ보λλ‘ νμ. (μ¬μ€ μ λλ μ΄ν° ν¨μμ async ν¨μκ° μΆκ°λ‘ μ‘΄μ¬νκΈ°λ§ λμ€μ λΉλκΈ° μ²λ¦¬λ₯Ό 곡λΆν΄λ©° μμ 보μ.)
ES6 ν¨μμ κ΅¬λΆ | constructor | prototype | super | arguments |
---|---|---|---|---|
μΌλ° ν¨μ(Normal) | O | O | X | O |
λ©μλ(Method) | X | X | O | O |
νμ΄ν ν¨μ(Arrow) | X | X | X | X |
ES6 μ¬μλΆν° λ©μλμ λν μ μκ° λ©μλ μΆμ½ ννμΌλ‘ μ μλ ν¨μλ§μΌλ‘ λͺ
ννκ² κ·μ λμλ€. ES6μ λ©μλλ non-constructorμ΄λ©°, μμ μ λ°μΈλ©ν κ°μ²΄λ₯Ό κ°λ¦¬ν€λ λ΄λΆ μ¬λ‘― [[HomeObject]]λ₯Ό κ°λλ€. μ΄λ₯Ό ν΅ν΄ super ν€μλλ₯Ό μ¬μ©ν μ μλ€.
μ΄μ²λΌ ES6 λ©μλλ λ³Έμ°μ κΈ°λ₯(super)μ μΆκ°νκ³ μλ―Έμ μΌλ‘ λ§μ§ μλ κΈ°λ₯(constructor)μ μ κ±°νλ€. λ°λΌμ λ©μλλ₯Ό μ μν λ λ©μλ μΆμ½ ννμ ν΅ν΄μλ§ μ μνλ κ²μ΄ μ’λ€.
νμ΄ν ν¨μλ μΈμ€ν΄μ€λ₯Ό μμ±ν μ μλ non-constructorμ΄λ©°, μΌλ° ν¨μμ λ€λ₯΄κ² μ€λ³΅λ 맀κ°λ³μ μ΄λ¦μ μ μΈν μ μλ€. (μ격λͺ¨λμμλ μΌλ° ν¨μλ μ€λ³΅λ 맀κ°λ³μ μ΄λ¦μ μ μΈν μ μλ€.) λν νμ΄ν ν¨μλ ν¨μ μ체μ this, arguments, super, new.target λ°μΈλ©μ κ°μ§ μλλ€.
νμ΄ν ν¨μλ ν¨μ μ체μ this λ°μΈλ©μ κ°μ§ μλλ€. λ°λΌμ νμ΄ν ν¨μ λ΄λΆμμ thisλ₯Ό μ°Έμ‘°νλ©΄ μμ μ€μ½νμ thisλ₯Ό κ·Έλλ‘ μ°Έμ‘°νλ€. μ΄λ₯Ό lexical thisλΌ νλ€. λ§μ½ νμ΄ν ν¨μκ° μ€μ²©λμ΄ μλ€λ©΄ μμ νμ΄ν ν¨μμλ this λ°μΈλ©μ΄ μμΌλ―λ‘ μ€μ½ν μ²΄μΈ μμμ κ°μ₯ κ°κΉμ΄ μμ ν¨μ μ€ νμ΄ν ν¨μκ° μλ ν¨μμ thisλ₯Ό μ°Έμ‘°νλ€.
νμ΄ν ν¨μλ ν¨μ μ체μ super λ°μΈλ©μ κ°μ§ μλλ€. λ°λΌμ νμ΄ν ν¨μ λ΄λΆμμ superλ₯Ό μ°Έμ‘°νλ©΄ thisμ λ§μ°¬κ°μ§λ‘ μμ μ€μ½νμ superλ₯Ό μ°Έμ‘°νλ€.
λ§μ°¬κ°μ§λ‘ μμ μ€μ½νμ argumentsλ₯Ό μ°Έμ‘°νλ€.
Rest νλΌλ―Έν°(λλ¨Έμ§ λ§€κ°λ³μ)λ 맀κ°λ³μ μ΄λ¦ μμ μΈκ°μ μ ...μ λΆμ¬μ μ μν 맀κ°λ³μλ₯Ό μλ―Ένλ€. Rest νλΌλ―Έν°λ ν¨μμ μ λ¬λ μΈμλ€μ λͺ©λ‘μ λ°°μ΄λ‘ μ λ¬λ°λλ€.
function foo(...rest) {
console.log(rest); // [1, 2, 3, 4, 5]
}
// λ€λ₯Έ 맀κ°λ³μλ€κ³Ό μ¬μ©ν λ λ°λμ λ§μ§λ§ νλΌλ―Έν°μ΄μ΄μΌνλ€.
function bar(x, y, ...rest) {
console.log(x) // 1
console.log(y) // 2
console.log(rest); // [3, 4, 5]]
}
foo(1, 2, 3, 4, 5);
bar(1, 2, 3, 4, 5);
Rest νλΌλ―Έν°λ νλλ§ μ μν μ μμΌλ©°, ν¨μ κ°μ²΄μ length νλ‘νΌν°μ μν₯μ μ£Όμ§ μλλ€.
μμμ μ¬μ©νλ arguments κ°μ²΄ λμ Rest νλΌλ―Έν°λ₯Ό νμ©ν μ μλ€. Rest νλΌλ―Έν°λ λ°°μ΄μ΄κΈ° λλ¬Έμ λ°°μ΄ λ©μλλ₯Ό μ¬μ©νκΈ° μν΄ λ°°μ΄λ‘ λ³νν΄μΌνλ λ²κ±°λ‘μμ΄ μλ€.
μλ°μ€ν¬λ¦½νΈλ 맀κ°λ³μμ κ°μλ§νΌ μΈμλ₯Ό μ λ¬νλμ§ νμΈνμ§ μκΈ° λλ¬Έμ, 맀κ°λ³μκ° undefinedλ‘ λ¨μ μλμΉ μμ κ²°κ³Όλ₯Ό μ΄λν μ μλ€. μλμ μμ μ½λλ₯Ό 보μ.
function sum(x, y) {
return x + y;
}
console.log(sum(1)); // NaN
ES6μμλ μ΄λ¬ν μν©μ λ°©μ§νκΈ° μν΄ λ§€κ°λ³μ κΈ°λ³Έκ°μ΄ λμ λμλ€. 맀κ°λ³μ κΈ°λ³Έκ°μ 맀κ°λ³μμ μΈμλ₯Ό μ λ¬νμ§ μμ κ²½μ°μ undefinedλ₯Ό μ λ¬ν κ²½μ°μλ§ μ ν¨νλ€. λν Rest νλΌλ―Έν°μλ κΈ°λ³Έκ°μ μ§μ ν μ μλ€.
function sum(x = 0, y = 0) {
return x + y;
}
console.log(sum(1)); // 1
맀κ°λ³μ κΈ°λ³Έκ°μ ν¨μ μ μμ μ μΈν 맀κ°λ³μ κ°μλ₯Ό λνλ΄λ ν¨μ κ°μ²΄μ length νλ‘νΌν°μ arguments κ°μ²΄μ μλ¬΄λ° μν₯μ μ£Όμ§ μλλ€.