νλ‘κ·Έλλ° μΈμ΄μ ν¨μλ μΌλ ¨μ κ³Όμ μ λ¬Έ(statement)μΌλ‘ ꡬννκ³ μ½λ λΈλ‘μΌλ‘ κ°μΈμ νλμ μ€ν λ¨μλ‘ μ μν κ²μ΄λ€.
ν¨μ 리ν°λ΄μ ꡬμ±μμλ λ€μκ³Ό κ°λ€.
ν¨μ 리ν°λ΄μ νκ°λλ κ°μ μμ±νλ©° ν¨μλ κ°μ²΄μ΄λ€. μΌλ° κ°μ²΄λ νΈμΆν μ μμ§λ§ ν¨μλ νΈμΆν μ μλ€.
ν¨μ μ μλ₯Ό μ μνλ λ°©λ²μλ 4κ°μ§κ° μλ€.
π§ λ³μ μ μΈκ³Ό ν¨μ μ μ
λ³μλ μ μΈ(declaration) νλ€κ³ νμ§λ§ ν¨μλ μ μ (definitnion) νλ€κ³ νννλ€. ν¨μ μ μΈλ¬Έμ΄ νκ°λλ©΄ μλ³μκ° μ묡μ μΌλ‘ μμ±λκ³ ν¨μ κ°μ²΄κ° ν λΉλλ€.
function add(x, y) {
return x+y;
}
ν¨μ μ μΈλ¬Έμ ν¨μ 리ν°λ΄κ³Ό ννκ° λμΌνλ€. λ¨ ν¨μ 리ν°λ΄μ ν¨μ μ΄λ¦μ μλ΅ν μ μμΌλ ν¨μ μ μΈλ¬Έμ ν¨μ μ΄λ¦μ μλ΅ν μ μλ€.
ν¨μ μ μΈλ¬Έμ ννμμ΄ μλ λ¬Έμ΄κΈ° λλ¬Έμ μ΄λ₯Ό μ€ννλ©΄ μλ£ κ° undefined κ° μΆλ ₯λλ€.
μλ°μ€ν¬λ¦½νΈ μμ§μ μμ±λ ν¨μλ₯Ό νΈμΆνκΈ° μν΄ ν¨μ μ΄λ¦κ³Ό λμΌν μ΄λ¦μ μλ³μλ₯Ό
ν¨μ μ μΈλ¬Έμ ννμμ΄ μλμΈ λ¬Έμ΄λ€.
var add = function(x, y) {
return x+y;
}
μλ°μ€ν¬λ¦½νΈμ ν¨μλ κ°μ²λΌ λ³μμ ν λΉν μλ μκ³ , νλ‘νΌν°μ κ°μ΄ λ μλ μμΌλ©° λ°°μ΄μ μμκ° λ μ μλ μΌκΈ κ°μ²΄μ΄λ€.
ν¨μ ννμμ ννμμΈ λ¬Έμ΄λ€.
ν¨μ ννμμΌλ‘ μ μν ν¨μμ ν¨μ μ μΈλ¬ΈμΌλ‘ μ μν ν¨μμ μμ± μμ μ λ€λ₯΄λ€.
μλ°μ€ν¬λ¦½νΈ μμ§μ λͺ¨λ μ μΈλ¬Έμ μμ€μ½λμμ μ°Ύμλ΄ λ¨Όμ μ€ννκ³ νκ° νλ€κ³ νλ€. ν¨μ μ μΈλ¬Έμ λν βλ¬Έβμ΄κΈ° λλ¬Έμ μ½λμ μ λλ‘ λμ΄ μ¬λ €μ§ κ²μ²λΌ λμνλ€. μ΄λ₯Ό ν¨μ νΈμ΄μ€ν μ΄λΌκ³ νλ€.
var ν€μλλ₯Ό μ¬μ©ν λ³μ μ μΈλ¬Έκ³Ό ν¨μ μ μΈλ¬Έμ λ°νμ μ΄μ μ μλ°μ€ν¬λ¦½νΈ μμ§μ μν΄ λ¨Όμ μ€νλμ΄ μλ³μλ₯Ό μμ±νλ€λ μ μμ λμΌνμ§λ§, var ν€μλλ‘ μ μΈλ λ³μλ undefinedλ‘ μ΄κΈ°νλκ³ , ν¨μ μ μΈλ¬Έμ ν΅ν΄ μ묡μ μΌλ‘ μμ±λ μλ³μλ ν¨μ κ°μ²΄λ‘ μ΄κΈ°νλλ€. λ°λΌμ var ν€μλλ₯Ό μ¬μ©ν λ³μ μ μΈλ¬Έ μ΄μ μ λ³μλ₯Ό μ°Έμ‘° νλ©΄ λ³μ νΈμ΄μ€ν μ μν΄ undefinedλ‘ νκ°λμ§λ§ ν¨μ μ μΈλ¬ΈμΌλ‘ μ μν ν¨μλ₯Ό ν¨μ μ μΈλ¬Έ μ΄μ μ νΈμΆνλ©΄ ν¨μ νΈμ΄μ€ν μ μν΄ νΈμΆμ΄ κ°λ₯νλ€.
ν¨μ ννμμ λ³μμ ν λΉλλ κ°μ΄ ν¨μ 리ν°λ΄μΈ λ¬Έμ΄λ―λ‘ ν¨μλ₯Ό μ μνλ©΄ ν¨μ νΈμ΄μ€ν μ΄ λ°μνλ κ²μ΄ μλλΌ λ³μ νΈμ΄μ€ν μ΄ λ°μνλ€.
var add = new Function('x', 'y', 'return x + y');
console.log(add(2, 5)); // 7
var add = (x, y) => x+y;
ES6μμ λμ
λ νμ΄ν ν¨μ(arrow function)λ function ν€μλ λμ μ νμ΄ν(β)λ₯Ό μ¬μ©ν΄ μ’ λ κ°λ΅ν λ°©λ²μΌλ‘ ν¨μλ₯Ό μ μΈν μ μλ€.
// ν¨μ μ μΈλ¬Έ
function add(x, y) {
return x + y;
}
// ν¨μ νΈμΆ
// μΈμ 1κ³Ό 2λ 맀κ°λ³μ xμ yμ μμλλ‘ ν λΉλκ³ ν¨μ λͺΈμ²΄μ λ¬Έλ€μ΄ μ€νλλ€.
var result = add(1, 2);
μλ°μ€ν¬λ¦½νΈλ μμ κ°μ νΉμ§μ κ°λλ€. λ°λΌμ ν¨μλ₯Ό μ μν λ μ μ ν μΈμκ° μ λ¬λμλμ§ νμΈν νμκ° μλ€.
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, c) {
a = a || 0;
b = b || 0;
c = c || 0;
return a + b + c;
}
console.log(add(1, 2, 3)); // 6
console.log(add(1, 2)); // 3
console.log(add(1)); // 1
console.log(add()); // 0
ES6μμ λμ λ 맀κ°λ³μ κΈ°λ³Έκ°μ μ¬μ©νλκ²λ κ°λ₯νλ€.
function add(a = 0, b = 0, c = 0) {
return a + b + c;
}
console.log(add(1, 2, 3)); // 6
console.log(add(1, 2)); // 3
console.log(add(1)); // 1
console.log(add()); // 0
맀κ°λ³μλ μμμ μλ―Έκ° μλ€. λ°λΌμ 맀κ°λ³μκ° λ§μμ§λ©΄ ν¨μλ₯Ό νΈμΆν λ μ λ¬ν΄μΌ ν μΈμμ μμλ₯Ό κ³ λ €ν΄μΌ νλ€. 맀κ°λ³μμ κ°μκ° λ§λ€λ κ²μ ν¨μκ° μ¬λ¬κ°μ§ μΌμ νλ€λ μ¦κ±°μ΄λ―λ‘ λ°λμ§νμ§ μλ€. μ΄μμ μΈ ν¨μλ ν κ°μ§ μΌλ§ ν΄μΌνλ©° κ°κΈμ μκ² λ§λ€μ΄μΌ νλ€.
return
ν€μλμ ννμ(λ°νκ°)μΌλ‘ μ΄λ€μ§ λ°νλ¬Έμ μ¬μ©ν΄ μ€ν κ²°κ³Όλ₯Ό ν¨μ μΈλΆλ‘ λ°ν(return)ν μ μλ€.
// 맀κ°λ³μ primitiveλ μμκ°μ μ λ¬λ°κ³ , 맀κ°λ³μ objλ κ°μ²΄λ₯Ό μ λ¬λ°λλ€.
function changeVal(primitive, obj) {
primitive += 100;
obj.name = 'Kim';
}
// μΈλΆ μν
var num = 100;
var person = { name: 'Lee' };
console.log(num); // 100
console.log(person); // {name: "Lee"}
// μμκ°μ κ° μμ²΄κ° λ³΅μ¬λμ΄ μ λ¬λκ³ κ°μ²΄λ μ°Έμ‘°κ°μ΄ 볡μ¬λμ΄ μ λ¬λλ€.
changeVal(num, person);
// μμκ°μ μλ³Έμ΄ νΌμλμ§ μλλ€.
console.log(num); // 100
// κ°μ²΄λ μλ³Έμ΄ νΌμλλ€.
console.log(person); // {name: "Kim"}
μμ νμ μΈμλ κ° μμ²΄κ° λ³΅μ¬λμ΄ λ§€κ°λ³μμ μ λ¬λκΈ° λλ¬Έμ ν¨μ λͺΈμ²΄μμ κ·Έ κ°μ λ³κ²½(μ¬ν λΉμ ν΅ν κ΅μ²΄)ν΄λ μλ³Έμ νΌμλμ§ μλλ€. λ€μ λ§ν΄, μΈλΆ μν, μ¦ ν¨μ μΈλΆμμ ν¨μ λͺΈμ²΄ λ΄λΆλ‘ μ λ¬ν μμ κ°μ μλ³Έμ λ³κ²½νλ μ΄λ ν λΆμν¨κ³Όλ λ°μνμ§ μλλ€.
νμ§λ§ κ°μ²΄ νμ
μΈμλ μ°Έμ‘° κ°μ΄ 볡μ¬λμ΄ λ§€κ°λ³μμ μ λ¬λκΈ° λλ¬Έμ ν¨μ λͺΈμ²΄μμ μ°Έμ‘° κ°μ ν΅ν΄ κ°μ²΄λ₯Ό λ³κ²½ν κ²½μ° μλ³Έμ΄ νΌμλλ€. λ€μ λ§ν΄, μΈλΆ μν, μ¦ ν¨μ μΈλΆμμ ν¨μ λͺΈμ²΄ λ΄λΆλ‘ μ λ¬ν μ°Έμ‘° κ°μ μν΄ μλ³Έ κ°μ²΄κ° λ³κ²½λλ λΆμ ν¨κ³Όκ° λ°μνλ€.
(function () {
var a = 3;
var b = 5;
return a*b;
} ());
μ¦μ μ€ν ν¨μλ ν¨μ μ μμ λμμ μ¦μ νΈμΆλλ ν¨μλ₯Ό μλ―Ένλ©° λ€μ νΈμΆν μ μλ€. μ¦μ μ€ν ν¨μλ λ°λμ κ·Έλ£Ή μ°μ°μ ( ... )λ‘ κ°μΈμΌ νλ©°, μ΅λͺ ν¨μλ₯Ό μ¬μ©νλ κ²μ΄ μΌλ°μ μ΄λ€.
// ν¨μ ννμ
var factorial = function foo(n) {
// νμΆ μ‘°κ±΄: nμ΄ 1 μ΄νμΌ λ μ¬κ· νΈμΆμ λ©μΆλ€.
if (n <= 1) return 1;
// ν¨μλ₯Ό κ°λ¦¬ν€λ μλ³μλ‘ μκΈ° μμ μ μ¬κ· νΈμΆ
return n * factorial(n - 1);
// ν¨μ μ΄λ¦μΌλ‘ μκΈ° μμ μ μ¬κ· νΈμΆν μλ μλ€.
// console.log(factorial === foo); // true
// return n * foo(n - 1);
};
console.log(factorial(5)); // 5! = 5 * 4 * 3 * 2 * 1 = 120
ν¨μκ° μκΈ° μμ μ νΈμΆνλ κ²μ μ¬κ· νΈμΆ(recursive call)μ΄λΌ νλ€. μ¬κ· ν¨μλ μμ μ 무ν νΈμΆ νλ―λ‘ μ¬κ· νΈμΆμ λ©μΆ μ μλ νμΆ μ‘°κ±΄μ λ°λμ λ§λ€μ΄μΌ νλ€.
function outer() {
var x = 1;
// μ€μ²© ν¨μ
function inner() {
var y = 2;
// μΈλΆ ν¨μμ λ³μλ₯Ό μ°Έμ‘°ν μ μλ€.
console.log(x + y); // 3
}
inner();
}
outer();
ν¨μ λ΄λΆμ μ μλ ν¨μλ₯Ό μ€μ²© ν¨μλΌκ³ νλ€.
// μΈλΆμμ μ λ¬λ°μ fλ₯Ό nλ§νΌ λ°λ³΅ νΈμΆνλ€
function repeat(n, f) {
for (var i = 0; i < n; i++) {
f(i); // iλ₯Ό μ λ¬νλ©΄μ fλ₯Ό νΈμΆ
}
}
var logAll = function (i) {
console.log(i);
};
// λ°λ³΅ νΈμΆν ν¨μλ₯Ό μΈμλ‘ μ λ¬νλ€.
repeat(5, logAll); // 0 1 2 3 4
var logOdds = function (i) {
if (i % 2) console.log(i);
};
// λ°λ³΅ νΈμΆν ν¨μλ₯Ό μΈμλ‘ μ λ¬νλ€.
repeat(5, logOdds); // 1 3
ν¨μμ 맀κ°λ³μλ₯Ό ν΅ν΄ λ€λ₯Έ ν¨μμ λ΄λΆλ‘ μ λ¬λλ ν¨μλ₯Ό μ½λ°± ν¨μλΌκ³ νλ©°, 맀κ°λ³μλ₯Ό ν΅ν΄ ν¨μμ μΈλΆμμ μ½λ°± ν¨μλ₯Ό μ λ¬λ°μ ν¨μλ₯Ό κ³ μ°¨ ν¨μλΌκ³ νλ€.
κ³ μ°¨ ν¨μλ μ½λ°± ν¨μλ₯Ό μμ μ μΌλΆλΆμΌλ‘ ν©μ±νλ©° κ³ μ°¨ ν¨μλ 맀κ°λ³μλ₯Ό ν΅ν΄ μ λ¬λ°μ μ½λ°± ν¨μμ νΈμΆ μμ μ κ²°μ ν΄μ νΈμΆνλ€.
λ€μ λ§ν΄, μ½λ°± ν¨μλ κ³ μ°¨ ν¨μμ μν΄ νΈμΆλλ©° μ΄λ κ³ μ°¨ ν¨μλ νμμ λ°λΌ ν¨μμ μΈμλ₯Ό μ λ¬ν μ μλ€.
var count = 0; // νμ¬ μΉ΄μ΄νΈλ₯Ό λνλ΄λ μν
// μμ ν¨μ increaseλ λμΌν μΈμκ° μ λ¬λλ©΄ μΈμ λ λμΌν κ°μ λ°ννλ€.
function increase(n) {
return ++n;
}
// μμ ν¨μκ° λ°νν κ²°κ³Όκ°μ λ³μμ μ¬ν λΉν΄μ μνλ₯Ό λ³κ²½
count = increase(count);
console.log(count); // 1
count = increase(count);
console.log(count); // 2
var count = 0; // νμ¬ μΉ΄μ΄νΈλ₯Ό λνλ΄λ μν: increase ν¨μμ μν΄ λ³ννλ€.
// λΉμμ ν¨μ
function increase() {
return ++count; // μΈλΆ μνμ μμ‘΄νλ©° μΈλΆ μνλ₯Ό λ³κ²½νλ€.
}
// λΉμμ ν¨μλ μΈλΆ μν(count)λ₯Ό λ³κ²½νλ―λ‘ μν λ³νλ₯Ό μΆμ νκΈ° μ΄λ €μμ§λ€.
increase();
console.log(count); // 1
increase();
console.log(count); // 2
ν¨μν νλ‘κ·Έλλ°μμ μ΄λ€ μΈλΆ μνμ μμ‘΄νμ§λ μκ³ λ³κ²½νμ§λ μλ, μ¦ λΆμ ν¨κ³Όκ° μλ ν¨μλ₯Ό μμ ν¨μλΌκ³ νκ³ , μΈλΆ μνμ μμ‘΄νκ±°λ μΈλΆ μνλ₯Ό λ³κ²½νλ, μ¦ λΆμ ν¨κ³Όκ° μλ ν¨μλ₯Ό λΉμμ ν¨μλΌκ³ νλ€.