μλμ κ°μ 쑰건μ λ§μ‘±νλ κ°μ²΄λ₯Ό μΌκΈκ°μ²΄ λΌκ³ νλ€.
ν¨μ κ°μ²΄μνλ‘νΌν°μλ arguments
, caller
, length
, name
, prototype
νλ‘νΌν°λ λͺ¨λ μΌλ° κ°μ²΄μλ μλ ν¨μ κ°μ²΄ κ³ μ μ λ°μ΄ν° νλ‘νΌν°μ΄λ€.
arguments
νλ‘νΌν°ν¨μ κ°μ²΄μ arguments νλ‘νΌν°μ κ°μ arguments κ°μ²΄μ΄λ€.
argement κ°μ²΄λ ν¨μ νΈμΆμ μ λ¬λ μΈμλ€μ μ 보λ₯Ό λ΄κ³ μλ μν κ°λ₯ν μ μ¬ λ°°μ΄ κ°μ²΄μ΄λ©°, ν¨μ λ΄λΆμμ μ§μ λ³μμ²λΌ μ¬μ©λλ€. μ¦ ν¨μ μΈλΆμμλ μ°Έμ‘°ν μ μλ€.
function multiply(x, y) {
console.log(arguments);
return x * y;
}
console.log(multiply()); // NaN
console.log(multiply(1)); // NaN
console.log(multiply(1, 2)); // 2
console.log(multiply(1, 2, 3)); // 2
arguments κ°μ²΄λ 맀κ°λ³μ κ°μλ₯Ό νμ ν μ μλ κ°λ³ μΈμ ν¨μ ꡬνμ μ μ©νλ€.
function sum() {
let res = 0;
// arguments κ°μ²΄λ length νλ‘νΌν°κ° μλ μ μ¬ λ°°μ΄ κ°μ²΄μ΄λ―λ‘ for λ¬ΈμΌλ‘ μνν μ μλ€.
for (let i = 0; i < arguments.length; i++) {
res += arguments[i];
}
return res;
}
console.log(sum()); // 0
console.log(sum(1, 2)); // 3
console.log(sum(1, 2, 3)); // 6
caller
νλ‘νΌν°ν¨μ κ°μ²΄μ caller νλ‘νΌν°λ ν¨μ μμ μ νΈμΆν ν¨μλ₯Ό κ°λ¦¬ν¨λ€.
function foo(func) {
return func();
}
function bar() {
return 'caller : ' + bar.caller;
}
// λΈλΌμ°μ μμμ μ€νν κ²°κ³Ό
console.log(foo(bar)); // caller : function foo(func) {...}
console.log(bar()); // caller : null
length
νλ‘νΌν°ν¨μ κ°μ²΄μ length νλ‘νΌν°λ ν¨μλ₯Ό μ μν λ μ μΈν 맀κ°λ³μμ κ°μλ₯Ό κ°λ¦¬ν¨λ€.
arguments κ°μ²΄μ length νλ‘νΌν°λ μΈμμ κ°μλ₯Ό κ°λ¦¬ν€κ³ , ν¨μ κ°μ²΄μ lengthλ 맀κ°λ³μμ κ°μλ₯Ό κ°λ¦¬ν€λ―λ‘ μ£Όμνλ€.
function foo() {}
console.log(foo.length); // 0
function bar(x) {
return x;
}
console.log(bar.length); // 1
function baz(x, y) {
return x * y;
}
console.log(baz.length); // 2
name
νλ‘νΌν°ν¨μ κ°μ²΄μ name νλ‘νΌν°λ ν¨μ μ΄λ¦μ λνλΈλ€.
// κΈ°λͺ
ν¨μ ννμ
var namedFunc = function foo() {};
console.log(namedFunc.name); // foo
// μ΅λͺ
ν¨μ ννμ
var anonymousFunc = function() {};
// ES5: name νλ‘νΌν°λ λΉ λ¬Έμμ΄μ κ°μΌλ‘ κ°λλ€.
// ES6: name νλ‘νΌν°λ ν¨μ κ°μ²΄λ₯Ό κ°λ¦¬ν€λ λ³μ μ΄λ¦μ κ°μΌλ‘ κ°λλ€.
console.log(anonymousFunc.name); // anonymousFunc
// ν¨μ μ μΈλ¬Έ(Function declaration)
function bar() {}
console.log(bar.name); // bar
__proto__
μ κ·Όμ νλ‘νΌν°__proto__
νλ‘νΌν°λ [[Prototype]] λ΄λΆ μ¬λ‘―μ΄ κ°λ¦¬ν€λ νλ‘ν νμ
κ°μ²΄μ μ κ·ΌνκΈ° μν΄ μ¬μ©νλ μ κ·Όμ νλ‘νΌν°μ΄λ€.
prototype
νλ‘νΌν°prototype νλ‘νΌν°λ μμ±μ ν¨μλ‘ νΈμΆ ν μ μλ ν¨μ κ°μ²΄, μ¦ constructorλ§μ΄ μμ νλ νλ‘νΌν°λ€. μΌλ° κ°μ²΄μ μμ±μ ν¨μλ‘ νΈμΆν μ μλ non-constructorμλ prototype νλ‘νΌν°κ° μλ€.