
λ§€κ° λ³μμ μΈμ
ν¨μλ₯Ό μ€ννκΈ° μν΄ νμν κ°μ ν¨μ μΈλΆμμ ν¨μ λ΄λΆλ‘ μ λ¬ν νμκ° μλ κ²½μ°, λ§€κ°λ³μ(parameter)λ₯Ό ν΅ν΄ μΈμ(argument)λ₯Ό μ λ¬νλ€.
μΈμλ κ°μΌλ‘ νκ°λ μ μλ ννμμ΄μ΄μΌ νλ€. μΈμλ ν¨μλ₯Ό νΈμΆν λ μ§μ νλ©°, κ°μμ νμ μ μ νμ΄ μλ€.
λ§€κ°λ³μλ ν¨μλ₯Ό μ μν λ μ μΈνλ©°, ν¨μ λͺΈμ²΄ λ΄λΆμμ λ³μμ λμΌνκ² μ·¨κΈλλ€. ν¨μκ° νΈμΆλλ©΄ ν¨μ λͺΈμ²΄ λ΄μμ μ묡μ μΌλ‘ λ§€κ°λ³μκ° μμ±λκ³ , undefinedλ‘ μ΄κΈ°νλ ν μΈμκ° μμλλ‘ ν λΉλλ€. λ§€κ°λ³μλ ν¨μ λͺΈμ²΄ λ΄λΆμμλ§ μ°Έμ‘°ν μ μκ³ , ν¨μ λͺΈμ²΄ μΈλΆμμλ μ°Έμ‘°ν μ μλ€.
ν¨μλ λ§€κ°λ³μμ κ°μμ€μ μΈμμ κ°μκ° μΌμΉνλμ§ μ²΄ν¬νμ§ μλλ€. λ§€κ°λ³μλ³΄λ€ μ λ¬λλ μΈμκ° λ§κ±°λ μ μ κ²½μ° μλ¬κ° λ°μνμ§ μλλ€. μΈμκ° λͺ¨μλΌλ κ²½μ° μΈμκ° ν λΉλμ§ μμ λ§€κ°λ³μμ κ°μ undefinedκ° λκ³ , μΈμκ° λ λ§μ κ²½μ°μ μ΄κ³Όλ μΈμλ 무μλλ©°, λ€λ§ arguments κ°μ²΄μ νλ‘νΌν°μλ ν¬ν¨λλ€.
function add(x, y) {
return x + y;
}
console.log(x, y); // ReferenceError: x is not defined
console.log(add(2)); // NaN (2 + undefinedμ κ²°κ³Ό)
console.log(add(1, 2, 3)); // 3 (1 + 2μ κ²°κ³Ό)
μΈμ νμΈ
function add(x, y) {
return x + y;
}
// κ°λ°μμ μλ: λ κ°μ μ«μλ₯Ό λν κ°μ λ°ννλ ν¨μ
console.log(add(2)); // NaN
console.log(add('a', 'b')); // 'ab'
μλ°μ€ν¬λ¦½νΈ ν¨μλ λ§€κ°λ³μμ μΈμμ κ°μκ° μΌμΉνλμ§ νμΈνμ§ μμΌλ©°, λμ νμ μΈμ΄μ΄λ―λ‘ λ§€κ° λ³μμ νμ μ μ¬μ μ μ§μ ν μ μλ€. λ°λΌμ κ°λ°μμ μλμ λ€λ₯΄κ² ν¨μμ μ μ νμ§ μμ μΈμκ° λ€μ΄μλ μλ¬λ₯Ό λ°μνμ§ μκ³ μ½λκ° μ€νλλ€. λ°λΌμ μλ°μ€ν¬λ¦½νΈμμλ ν¨μλ₯Ό μ μν λ μ μ ν μΈμκ° μ λ¬λμλμ§ νμΈν νμκ° μλ€.
ν¨μ λ΄λΆμμ μΈμ νμ νμΈνκΈ°
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: μΈμλ λͺ¨λ μ«μ κ°μ΄μ΄μΌ ν©λλ€.
μμ κ°μ΄ ν¨μ λ΄λΆμμ νμΈμ κ±°μΉλ€ νλλΌλ, λΆμ μ ν νΈμΆμ μ¬μ μ λ°©μ§ν μλ μλ€. λ°λΌμ μ μ νμ μ μ μΈν μ μλ νμ μ€ν¬λ¦½νΈμ κ°μ μΈμ΄λ₯Ό λμ νμ¬ μ»΄νμΌ μμ μ λΆμ μ ν νΈμΆμ λ°©μ§ν μ μλλ‘ νλ κ²λ νλμ λ°©λ²μ΄λ€.
λ¨μΆ νκ°λ₯Ό μ¬μ©ν κΈ°λ³Έκ° ν λΉ
function add(a, b) {
a = a || 0;
b = b || 0;
return a + b;
}
console.log(add(1, 2)); // 3
console.log(add(1)); // 1
console.log(add()); // 0
ES6μμ λμ λ λ§€κ°λ³μ κΈ°λ³Έκ°
λ§€κ°λ³μ κΈ°λ³Έκ°μ λ§€κ°λ³μμ μΈμλ₯Ό μ λ¬νμ§ μμμ κ²½μ°μ undefinedλ₯Ό μ λ¬ν κ²½μ°μλ§ μ ν¨νλ€.
function add(a = 0, b = 0) {
return a + b;
}
console.log(add(1, 2)); // 3
console.log(add(1)); // 1
console.log(add()); // 0
λ§€κ°λ³μμ μ΅λ κ°μ
ECMAScript μ¬μμμλ λ§€κ°λ³μμ μ΅λ κ°μμ λν΄ λͺ μμ μΌλ‘ μ ννκ³ μμ§ μλ€. λ€λ§, 물리μ νκ³μ μν΄ μλ°μ€ν¬λ¦½νΈ μμ§λ§λ€ μ νμ μλ€.
λ§€κ°λ³μλ μμμ μλ―Έκ° μκΈ° λλ¬Έμ, λ§€κ°λ³μκ° λ§μμ§λ©΄ ν¨μλ₯Ό νΈμΆν λ μ λ¬ν΄μΌ ν μΈμμ μμλ₯Ό κ³ λ €ν΄μΌ νλ€. μ΄λ ν¨μλ₯Ό μ¬μ©νκΈ° μ΄λ ΅κ² νκ³ μ€μλ₯Ό λ°μμν¬ κ°λ₯μ±μ λμΈλ€. λ§μ½ λ§€κ°λ³μμ κ°μλ μμλ₯Ό λ³κ²½νλ©΄ ν¨μ νΈμΆ λ°©λ²λ λ°λμ΄ ν΄λΉ ν¨μλ₯Ό μ¬μ©νλ λͺ¨λ μ½λκ° μν₯μ λ°μΌλ―λ‘ μ μ§λ³΄μμ±μ΄ λλΉ μ§λ€.
μ¦, μ΄μμ μΈ λ§€κ°λ³μλ 0κ°μ΄λ©° μ μ μλ‘ μ’λ€. λ§€κ° λ³μκ° λ§λ€λ κ²μ ν¨μκ° μ¬λ¬κ°μ§ μΌμ νλ€λ λ»μ΄κΈ° λλ¬Έμ, λ§€κ°λ³μκ° μ μ μλ‘ μ’λ€λ κ²μ μ΄μμ μΈ ν¨μλ ν κ°μ§ μΌλ§ ν΄μΌ νλ©° κ°κΈμ μκ² λ§λ€μ΄μΌ νλ€λ ν΄λ¦° μ½λ μμ± μμΉκ³Όλ μΌλ§₯μν΅νλ€.
$.ajax({
method: 'POST',
url: '/user',
data: { id: 1, name: 'Lee' },
cache: false
});
μμ κ°μ΄ κ°μ²΄λ₯Ό μΈμλ‘ μ¬μ©ν κ²½μ°, λ§€κ° λ³μμ μμλ₯Ό μ κ²½μ°μ§ μμλ λκ³ λͺ μμ μΌλ‘ μΈμμ μλ―Έλ₯Ό μ€λͺ νλ νλ‘νΌν° ν€λ₯Ό μ¬μ©νκ² λμ΄ κ°λ μ±μ΄ μ’μμ§κ³ μ€μλ μ€μ΄λλ ν¨κ³Όκ° μλ€. λ€λ§, ν¨μ λ΄λΆλ‘ μ λ¬λ κ°μ²΄λ₯Ό λ³κ²½νλ©΄ ν¨μ μΈλΆμ κ°μ²΄κ° λ³κ²½λλ λΆμν¨κ³Όκ° λ°μνλ―λ‘ μ£Όμν΄μΌ νλ€.
λ°νλ¬Έ
ν¨μλ return ν€μλμ ννμμΌλ‘ μ΄λ€μ§ λ°νλ¬Έμ μ¬μ©ν΄ μ€ν κ²°κ³Όλ₯Ό ν¨μ μΈλΆλ‘ λ°νν μ μλ€. ν¨μ νΈμΆμ ννμμ΄λΌκ³ νλλ°, ν¨μ νΈμΆ ννμμ return ν€μλκ° λ°νν ννμμ νκ° κ²°κ³ΌμΈ λ°νκ°μΌλ‘ νκ°λλ€.
λ°νλ¬Έμ β ν¨μμ μ€νμ μ€λ¨νκ³ ν¨μ λͺΈμ²΄λ₯Ό λΉ μ Έλκ°κ³ , β‘return ν€μλ λ€μ μ€λ ννμμ νκ°ν΄ λ°ννλ€. return ν€μλ λ€μ ννμμ λͺ
μμ μΌλ‘ μ§μ νμ§ μμΌλ©΄ undefinedκ° λ°νλλ€.
function foo() {
return;
console.log('μ€νλμ§ μλλ€.');
}
console.log(foo()); // undefined
λ°νλ¬Έμ μλ΅ν κ²½μ°, ν¨μλ ν¨μ λͺΈμ²΄μ λ§μ§λ§ λ¬ΈκΉμ§ μ€νν ν μ묡μ μΌλ‘ undefinedλ₯Ό λ°ννλ€.
function foo () {}
console.log(foo()); // undefined
return ν€μλμ λ°νκ°μΌλ‘ μ¬μ©ν ννμ μ¬μ΄μ μ€λ°κΏμ΄ μμΌλ©΄ μΈλ―Έμ½λ‘ μλ μ½μ
κΈ°λ₯μ μν΄ μΈλ―Έμ½λ‘ μ΄ μΆκ°λμ΄ μλμΉ μμ κ²°κ³Όκ° λ°μν μ μλ€.
function multiply(x, y) {
return // μΈλ―Έμ½λ‘ μλ μ½μ
κΈ°λ₯(ASI)μ μν΄ return λ€μ μΈλ―Έμ½λ‘ μ½μ
x * y;
}
console.log(multiply(3, 5)); // undefined
λ°νλ¬Έμ ν¨μ λͺΈμ²΄ λ΄λΆμμλ§ μ¬μ©ν μ μμΌλ©°, μ μμμ μ¬μ©ν κ²½μ° Syntax Errorκ° λ°μνλ€. Node.jsλ λͺ¨λ μμ€ν μ μν΄ νμΌλ³λ‘ λ 립μ μΈ μ€μ½νλ₯Ό κ°κΈ° λλ¬Έμ, Node.js νκ²½μμλ νμΌμ κ°μ₯ λ°κΉ₯ μμμ λ°νλ¬Έμ μ¬μ©ν΄λ μλ¬κ° λ°μνμ§ μλλ€.
function foo () {
return;
}
foo();
return; //SyntaxError: Illegal return statement
μ°Έμ‘°μ μν μ λ¬κ³Ό μΈλΆ μνμ λ³κ²½
μμ κ°κ³Ό κ°μ²΄μ λΉκ΅μμ μ΄ν΄λ³΄μλ―, μμ κ°μ κ°μ μν μ λ¬, κ°μ²΄λ μ°Έμ‘°μ μν μ λ¬ λ°©μμΌλ‘ λμνλ€. λ§€κ°λ³μλ ν¨μ λͺΈμ²΄ λ΄λΆμμ λ³μμ λμΌνκ² μ·¨κΈλλ―λ‘ λ§€κ°λ³μμ νμ μ λ°λΌ κ°μ μν μ λ¬, μ°Έμ‘°μ μν μ λ¬ λ°©μμ κ·Έλλ‘ λ°λ₯Έλ€.
function changeVal(primitive, obj) {
primitive += 100;
obj.name = 'Kim';
}
var num = 100;
var person = {name: "Jung"};
changeVal(num, person);
// numμ μ μ₯λ μμ κ°μ κ° μμ²΄κ° λ³΅μ¬λκ³ , personμ μ μ₯λ κ°μ²΄λ μ°Έμ‘° κ°μ΄ 볡μ¬λμ΄ μ λ¬λλ€.
console.log(num); // 100 -> μμ κ°μ μλ³Έμ΄ νΌμλμ§ μμ
console.log(person); // {name: "Kim"} -> κ°μ²΄λ μλ³Έμ΄ νΌμλ¨
μμ νμ μΈμλ κ° μμ²΄κ° λ³΅μ¬λμ΄ λ§€κ°λ³μμ μ λ¬λκΈ° λλ¬Έμ ν¨μ λͺΈμ²΄μμ μ¬ν λΉμ ν΅ν΄ κ°μ λ³κ²½ν΄λ μλ³Έμ νΌμλμ§ μλλ€. μ¦, λΆμ ν¨κ³Όκ° λ°μνμ§ μλλ€.
κ·Έλ¬λ κ°μ²΄ νμ μΈμλ μ°Έμ‘° κ°μ΄ 볡μ¬λμ΄ λ§€κ°λ³μμ μ λ¬λκΈ° λλ¬Έμ ν¨μ λͺΈμ²΄μμ μ°Έμ‘° κ°μ ν΅ν΄ κ°μ²΄λ₯Ό λ³κ²½ν κ²½μ° μλ³Έμ΄ νΌμλλ€. μ¦, λΆμ ν¨κ³Όκ° λ°μνλ€.
μ΄μ²λΌ ν¨μκ° μΈλΆ μνλ₯Ό λ³κ²½νλ©΄ μν λ³νλ₯Ό μΆμ νκΈ° μ΄λ €μμ Έ, μ½λμ 볡μ‘μ±μ μ¦κ°μν€κ³ κ°λ μ±μ ν΄μΉκ² λλ€. κ°μ²΄μ λ³κ²½μ μΆμ νκΈ° μν΄μλ μ΅μ λ² ν¨ν΄ λ±μ ν΅ν΄ κ°μ²΄λ₯Ό μ°Έμ‘°νλ λͺ¨λ μ΄λ€μκ² λ³κ²½ μ¬μ€μ ν΅μ§νκ³ μ΄μ λμ²νλ μΆκ° λμμ΄ νμνλ€.
μ΄λ¬ν λ¬Έμ μ ν΄κ²° λ°©λ² μ€ νλλ κ°μ²΄λ₯Ό λΆλ³ κ°μ²΄λ‘ λ§λ€μ΄ μ¬μ©νλ κ²μ΄λ€. μ΄ κ²½μ° κ°μ²΄μ 볡μ¬λ³Έμ μλ‘κ² μμ±νλ λΉμ©μ λ€μ§λ§, κ°μ²΄λ₯Ό λ§μΉ μμ κ°μ²λΌ λ³κ²½ λΆκ°λ₯ν κ°μΌλ‘ λμνκ² λ§λ€ μ μλ€.
μΈλΆ μνλ₯Ό λ³κ²½νμ§ μκ³ μΈλΆ μνμ μμ‘΄νμ§λ μλ ν¨μλ₯Ό μμ ν¨μλΌκ³ λΆλ₯Έλ€. μμ ν¨μλ₯Ό ν΅ν΄ λΆμ ν¨κ³Όλ₯Ό μ΅λν μ΅μ νμ¬ μ€λ₯λ₯Ό νΌνκ³ νλ‘κ·Έλ¨μ μμ μ±μ λμ΄λ €λ νλ‘κ·Έλλ° ν¨λ¬λ€μμ ν¨μν νλ‘κ·Έλλ°μ΄λΌ νλ€.
μ΅μ λ² ν¨ν΄(Observer Pattern)
λμμΈ ν¨ν΄ μ€ νλλ‘, ν κ°μ²΄μ μνκ° λ³κ²½λ λ, κ·Έ μνλ₯Ό μμ‘΄νλ λ€λ₯Έ κ°μ²΄λ€μκ² μλμΌλ‘ ν΅μ§νκ³ μ λ°μ΄νΈνλ ꡬ쑰λ₯Ό μ 곡νλ€. κ°μ²΄ κ°μ μμ‘΄μ±μ μ΅μννλ©΄μ ν¨μ¨μ μΌλ‘ μν λ³κ²½μ κ΄λ¦¬ν μ μλ€.
주체(Subject)λ μνλ₯Ό κ΄λ¦¬νκ³ , λ³κ²½μ΄ λ°μνμ λ μ΅μ λ²λ€μκ² ν΅μ§νλ μν μ νλ€. μ΅μ λ²(Observer)λ 주체μ μνλ₯Ό κ΄μ°°νλ κ°μ²΄λ‘, 주체λ‘λΆν° ν΅μ§λ₯Ό λ°μΌλ©΄ κ·Έμ λ°λΌ μμ μ μνλ₯Ό μ λ°μ΄νΈνλ€.
μλλchangeValν¨μλ₯Ό λ°νμΌλ‘ λ§λ κ°λ¨ν μ΅μ λ² ν¨ν΄μ μμ μ½λμ΄λ€.personμ΄ μνλ₯Ό κ°μ§ κ°μ²΄μ΄κ³ ,addObserverλ₯Ό ν΅ν΄ λ³κ²½μ κ°μ§ν ν¨μλ€μ λ±λ‘νλ€.changeValμ ν΅ν΄personμ μνλ₯Ό λ³κ²½νλ©΄,notifyObserversκ° νΈμΆλμ΄ λ±λ‘λ λͺ¨λ μ΅μ λ²λ₯Ό μ€ννλ€.
const person = { name: 'Jung' }; // μνλ₯Ό κ°μ§ κ°μ²΄ const observers = []; // λ³κ²½μ κ°μ§ν μ΅μ λ²λ€ // μ΅μ λ² λ±λ‘ function addObserver(observer) { observers.push(observer); } // λ³κ²½ ν΅μ§ function notifyObservers() { observers.forEach(observer => observer(person)); } // κ°μ²΄ μν λ³κ²½ ν¨μ function changeVal(obj) { obj.name = "Kim"; // μν λ³κ²½ notifyObservers(); // λ³κ²½ ν΅μ§ } // μ΅μ λ² λ±λ‘ (λ³κ²½ μ μ€νλ ν¨μ) addObserver((updatedPerson) => { console.log('Observer 1:', updatedPerson); }); addObserver((updatedPerson) => { console.log('Observer 2:', updatedPerson); }); // μν λ³κ²½ changeVal(); // Output: // Observer 1: { name: 'Kim' } // Observer 2: { name: 'Kim' }
μ°Έκ³
- μ μ
- μ΄μ λͺ¨
- μΆν
- μν€λΆμ€
- μΆνμΌ
- 2020.09.25