1-1. arguments κ°μ²΄λ λκ³ , μ μ¬μ©νλ κ±°μ§?
μλ°μ€ν¬λ¦½νΈμμ arguments κ°μ²΄μ κ΄λ ¨λ κ°λ μ ν¨μμ μΈμ κ΄λ¦¬μ λ§€μ° μ μ©ν λꡬμ λλ€.
arguments κ°μ²΄λ μλ°μ€ν¬λ¦½νΈμμ λͺ¨λ ν¨μ λ΄μμ μλμΌλ‘ μμ±λλ νΉλ³ν κ°μ²΄μ λλ€. μ΄ κ°μ²΄λ ν¨μκ° νΈμΆλ λ μ λ¬λ **λͺ¨λ μΈμ(Arguments)**λ₯Ό λ°°μ΄κ³Ό μ μ¬ν ννλ‘ λ΄κ³ μμ΅λλ€.
νΉμ§:
• λ°°μ΄μ²λΌ μκ²Όμ§λ§ λ°°μ΄μ΄ μλ. μ¦, λ°°μ΄ λ©μλ(map, filter, forEach λ±)λ₯Ό μ¬μ©ν μ μμ§λ§, μΈλ±μ€λ‘ μ κ·Όνκ³ , length νλ‘νΌν°λ‘ μΈμμ κ°μλ₯Ό νμΈν μ μμ΅λλ€.
• ν¨μ μ μΈμμ μ μν λ§€κ°λ³μμ κ°μμ μκ΄μμ΄ μ λ¬λ λͺ¨λ μΈμλ₯Ό λ΄κ³ μμ΅λλ€. ν¨μκ° λͺ κ°μ μΈμλ₯Ό λ°μμ§ μ μ μμ λ μ μ©ν©λλ€.
μ μ¬μ©νλκ°?
• μ μ°ν ν¨μ ꡬν: ν¨μκ° λͺ κ°μ μΈμλ₯Ό λ°μμ§ λ―Έλ¦¬ μ μ μκ±°λ, νΉμ κ°μ μ΄μμ μΈμλ₯Ό λ°μ λ λͺ¨λ μ²λ¦¬νκ³ μΆμ λ μ μ©ν©λλ€.
• λ§€κ°λ³μλ³΄λ€ λ λ§μ μΈμλ₯Ό μ λ¬νμ λλ λͺ¨λ μ κ·Όν μ μκΈ° λλ¬Έμ, μ¬λ¬ κ°μ μΈμλ₯Ό μ²λ¦¬νλ ν¨μμμ μμ£Ό μ¬μ©λ©λλ€.
μμ:
function printArguments() {
console.log(arguments); // λͺ¨λ μ λ¬λ μΈμλ₯Ό λ΄κ³ μλ κ°μ²΄
console.log(arguments[0]); // 첫 λ²μ§Έ μΈμ
console.log(arguments[1]); // λ λ²μ§Έ μΈμ
console.log(arguments.length); // μ λ¬λ μΈμμ κ°μ
console.log('————');
}
printArguments('Young', 'Mark', 'Koby');
printArguments('Captain');
κ²°κ³Ό:
['Young', 'Mark', 'Koby']
Young
Mark
3
————
['Captain']
Captain
undefined
1
————
1-2. 'λ§€κ°λ³μλ³΄λ€ λ λ§μ μΈμλ₯Ό μ λ¬νμ λλ λͺ¨λ μ κ·Όν μ μκΈ° λλ¬Έμ, μ¬λ¬ κ°μ μΈμλ₯Ό μ²λ¦¬νλ ν¨μμμ μμ£Ό μ¬μ©λ©λλ€.' λΌκ³ νμμ? λ¬΄μ¨ μ리μΈμ§ λͺ¨λ₯΄κ² μ΄!
μλ°μ€ν¬λ¦½νΈμμλ ν¨μκ° μ ν΄μ§ λ§€κ°λ³μμ κ°μλ³΄λ€ λ λ§μ μΈμλ₯Ό μ λ¬λ°μ μ μμ΅λλ€. μ΄λ ν¨μ μ μΈμμ λͺ μλ λ§€κ°λ³μ μΈμ μΆκ°λ‘ μ λ¬λ μΈμλ arguments κ°μ²΄λ₯Ό ν΅ν΄ μ κ·Όν μ μμ΄μ.
μλ₯Ό λ€μ΄, ν¨μκ° μΈ κ°μ λ§€κ°λ³μλ₯Ό λ°λλ‘ μ μΈλμλλ°, λ€ κ°μ μΈμλ₯Ό μ λ¬νλ©΄ μ΄λ»κ² λ κΉμ? ν¨μλ arguments κ°μ²΄λ₯Ό μ¬μ©ν΄ μΆκ°λ‘ μ λ¬λ μΈμμλ μ κ·Όν μ μμ΅λλ€.
function printArguments(a, b, c) {
console.log(a); // 첫 λ²μ§Έ μΈμ
console.log(b); // λ λ²μ§Έ μΈμ
console.log(c); // μΈ λ²μ§Έ μΈμ
console.log(arguments); // μ λ¬λ λͺ¨λ μΈμ
console.log('————');
}
printArguments('apple', 'banana', 'cherry', 'date');
κ²°κ³Ό:
apple // 첫 λ²μ§Έ μΈμ a
banana // λ λ²μ§Έ μΈμ b
cherry // μΈ λ²μ§Έ μΈμ c
['apple', 'banana', 'cherry', 'date'] // μ λ¬λ λͺ¨λ μΈμ (arguments κ°μ²΄)
————
μ΄ μ½λλ₯Ό 보면, ν¨μλ **a, b, c**λΌλ μΈ κ°μ λ§€κ°λ³μλ₯Ό μ μνμ§λ§, μ€μ λ‘λ λ€ κ°μ μΈμ('apple', 'banana', 'cherry', 'date')λ₯Ό μ λ¬νμ΄μ.
ν¨μ λ΄λΆμμ **a, b, c**λ§ μ κ·Ό κ°λ₯νμ§λ§, arguments κ°μ²΄λ₯Ό μ¬μ©νλ©΄ λͺ¨λ μΈμλ₯Ό νμΈν μ μμ΅λλ€.
μ΄λ κ² arguments κ°μ²΄λ λ§€κ°λ³μ μΈμ μΆκ°λ‘ μ λ¬λ μΈμλ€μ μ²λ¦¬ν λ μ μ©ν΄μ. μ΄ μν©μμ μλ°μ€ν¬λ¦½νΈλ μΆκ° μΈμλ₯Ό 무μνμ§ μκ³ argumentsλ‘ μ μ₯ν΄ μ€λλ€.
λ μ μ°ν ν¨μ λ§λ€κΈ° μμ:
function sum() {
let total = 0;
for (let i = 0; i < arguments.length; i++) {
total += arguments[i]; // μ λ¬λ λͺ¨λ μΈμλ₯Ό λνκΈ°
}
return total;
}
console.log(sum(1, 2, 3)); // 6
console.log(sum(1, 2, 3, 4, 5, 6)); // 21
μ΄ ν¨μλ λ§€κ°λ³μλ₯Ό μ μνμ§ μκ³ , μ λ¬λ λͺ¨λ μΈμλ₯Ό arguments κ°μ²΄λ₯Ό ν΅ν΄ ν©μ°νκ³ μμ΄μ. λͺ κ°μ μΈμκ° μ λ¬λλ μκ΄μμ΄ λͺ¨λ μΈμλ₯Ό μ²λ¦¬ν μ μμ΅λλ€. μ΄ λ°©μμ μ μ°νκ² μΈμμ κ°μμ κ΄κ³μμ΄ λμνλ ν¨μλ₯Ό λ§λ€ μ μκ² ν΄μ€λλ€.
2. λ°°μ΄ λ©μλλ₯Ό μ¬μ©ν μ μλ μ μ¬λ°°μ΄μ΄ λ¬΄μ¨ μ리μΌ?
arguments κ°μ²΄λ **λ°°μ΄μ²λΌ μκ²Όμ§λ§ λ°°μ΄μ΄ μλ “μ μ¬ λ°°μ΄ κ°μ²΄”**λΌκ³ λΆλ¦ λλ€. μ΄ λ§μ μλ―Έλ μΈλ±μ€(μ: arguments[0], arguments[1] λ±)μ length μμ±μ κ°μ§κ³ μκΈ° λλ¬Έμ λ°°μ΄μ²λΌ μΈμλ₯Ό κ΄λ¦¬ν μ μμ§λ§, μ€μ λ°°μ΄μ΄ μλκΈ° λλ¬Έμ λ°°μ΄μ λ©μλ(map, filter, forEach, slice λ±)λ μ¬μ©ν μ μλ€λ λ»μ λλ€.
μ μ¬ λ°°μ΄ μμ:
function example() {
console.log(Array.isArray(arguments)); // false
}
example('a', 'b', 'c'); // κ²°κ³Ό: false
νμ§λ§ λ°°μ΄λ‘ λ³ννλ©΄ λ°°μ΄ λ©μλλ₯Ό μ¬μ©ν μ μμ΅λλ€. **Array.from()**μ΄λ **spread μ°μ°μ (...)**λ₯Ό μ΄μ©ν΄ argumentsλ₯Ό λ°°μ΄λ‘ λ³νν μ μμ΅λλ€.
Array.fromμ μ¬μ©ν μμ:
function example() {
let argsArray = Array.from(arguments);
console.log(argsArray.map(arg => arg.toUpperCase())); // ['A', 'B', 'C']
}
example('a', 'b', 'c');
spread μ°μ°μλ₯Ό μ¬μ©ν μμ:
function example() {
let argsArray = [...arguments];
console.log(argsArray.map(arg => arg.toUpperCase())); // ['A', 'B', 'C']
}
example('a', 'b', 'c');
3. μ΄ ν¨μ { for (const arg of argments) { console.log(arg); } μ λ©μλλ μ΄ν΄κ° κ°μ§ μμ.
for (const arg of arguments) {
console.log(arg);
}
μ΄ μ½λμμλ for...of λ°λ³΅λ¬Έμ μ¬μ©νμ¬ arguments κ°μ²΄ μμ λ€μ΄μλ κ°κ°μ μΈμλ₯Ό μννκ³ μμ΅λλ€.
for...of λ°λ³΅λ¬Έμ μλ―Έ:
• for...ofλ λ°λ³΅ κ°λ₯ν(iterable) κ°μ²΄μμ κ° μμλ₯Ό νλμ© κΊΌλ΄μ€λ λ°λ³΅λ¬Έμ λλ€. μλ°μ€ν¬λ¦½νΈμμ λ°°μ΄, λ¬Έμμ΄, μ μ¬ λ°°μ΄ κ°μ²΄ λ±μ λ°λ³΅ κ°λ₯ν κ°μ²΄λ‘ κ°μ£Όλ©λλ€.
• arguments κ°μ²΄λ λ°λ³΅ κ°λ₯ν κ°μ²΄ μ€ νλμ΄κΈ° λλ¬Έμ **for...of**λ₯Ό μ¬μ©ν΄ κ·Έ μμ μΈμλ€μ νλμ© κΊΌλ΄μ¬ μ μμ΅λλ€.
μ΄ μ½λλ 무μμ νλμ?
• for (const arg of arguments)λ argumentsμ λ΄κΈ΄ μΈμλ€μ νλμ© μνν©λλ€.
• κ° μνμμ arg λ³μμ νμ¬ μΈμκ° ν λΉλκ³ , **console.log(arg)**λ‘ ν΄λΉ μΈμκ° μΆλ ₯λ©λλ€.
μμ:
function printArguments() {
for (const arg of arguments) {
console.log(arg); // μ λ¬λ μΈμλ₯Ό νλμ© μΆλ ₯
}
console.log('————');
}
printArguments('Young', 'Mark', 'Koby');
printArguments('Captain');
printArguments('Suri', 'Jack', 'Joy', 'Noel');
κ²°κ³Ό:
Young
Mark
Koby
————
Captain
————
Suri
Jack
Joy
Noel
————
μμ½:
1. arguments κ°μ²΄λ ν¨μμ μ λ¬λ λͺ¨λ μΈμλ₯Ό λ°°μ΄κ³Ό μ μ¬ν ννλ‘ μ μ₯νλ κ°μ²΄μ λλ€. λ°°μ΄μ²λΌ μΈλ±μ€λ‘ μ κ·Όν μ μμ§λ§ λ°°μ΄μ λ©μλλ μ¬μ©ν μ μμ΅λλ€.
2. μ μ¬ λ°°μ΄μ΄λ λ°°μ΄μ²λΌ μκ²Όμ§λ§ λ°°μ΄μ΄ μλ κ°μ²΄λ₯Ό λ§νλ©°, λ°°μ΄μ λ©μλ λμ μΈλ±μ±κ³Ό length μμ±λ§ μ¬μ©ν μ μλ κ²μ μλ―Έν©λλ€. Array.from()μ΄λ spread μ°μ°μ(…)λ₯Ό μ΄μ©ν΄ λ°°μ΄λ‘ λ³νν μ μμ΅λλ€.
3. for...of λ°λ³΅λ¬Έμ μ¬μ©νμ¬ arguments κ°μ²΄λ₯Ό μννλ©΄ μ λ¬λ λͺ¨λ μΈμλ₯Ό μμλλ‘ μΆλ ₯ν μ μμ΅λλ€.