// λ§€κ°λ³μ 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"}- λ§€κ°λ³μλ νμ μ λ°λΌ κ°μ μν μ λ¬, μ°Έμ‘°μ μν μ λ¬ λ°©μμ λ°λ₯Έλ€.
- μ΄μ²λΌ μΈλΆ μν personμ μν΄ μλ³Έμ΄ νκ΄΄κ° λλ μν λ³νκ° μΌμ΄λλ©΄ μΆμ νκΈ°κ° μ΄λ €μμ§λ€. β μ½λμ 볡μ‘μ± μ¦κ°, κ°λ μ±μ ν΄μΉλ€ / λ Όλ¦¬κ° κ°λ¨ν΄μΌ λ²κ·Έκ° μΌμ΄λμ§μκ³ μ°ΎκΈ°κ° μ½λ€.
- κ°μ²΄μ λ³κ²½μ μΆμ νλ €λ©΄ μ΅μ λ² ν¨ν΄ λ±μ ν΅ν΄ λ³κ²½ μ¬μ€μ ν΅μ§νκ³ μ΄μ λμ²νλ μΆκ° λμμ΄ νμνλ€.
- λ λ€λ₯Έ λ°©λ² λΆλ³ κ°μ²΄λ‘ λ§λ€μ΄ μ¬μ©νλ κ² β κ°μ²΄λ₯Ό λ§μΉ μμκ°μ²λΌ λ³κ²½ λΆκ°λ₯ν κ°μΌλ‘ λμνκ² λ§λλ κ² μ) μ€νλ λλ¬Έλ², μλ³Έμ κ·Έλλ‘ μλ‘μ΄ κ°μ²΄ λ§λ€κΈ°
- ν¨μ μ μμ λμμ μ¦μ νΈμΆλλ ν¨μ
- λ¨ νλ²λ§ νΈμΆλλ©° μ¬νΈμΆν μ μλ€
// μ΅λͺ
μ¦μ μ€ν ν¨μ
(function () {
var a = 3;
var b = 5;
return a * b;
}());// κΈ°λͺ
μ¦μ μ€ν ν¨μ
(function foo() {
var a = 3;
var b = 5;
return a * b;
}());
foo(); // ReferenceError: foo is not defined- μ΅λͺ ν¨μλ₯Ό μ¬μ©νλ κ²μ΄ μΌλ°μ , κΈ°λͺ μ¦μ μ€ν ν¨μλ μ¬μ© κ°λ₯
- κ·Έλ£Ή μ°μ°μ
( )λ΄μ κΈ°λͺ ν¨μλ ν¨μ μ μΈλ¬Έμ΄ μλ ν¨μ 리ν°λ΄λ‘ νκ° - ν¨μ μ΄λ¦μ ν¨μ λͺΈμ²΄μμλ§ μ°Έμ‘°ν μ μλ μλ³μμ΄λ―λ‘ μ¦μ μ€ν ν¨μλ₯Ό λ€μ νΈμΆν μ μλ€.
function () { // SyntaxError: Function statements require a function name
// ...
}();- μ¦μ μ€ν ν¨μλ λ°λμ κ·Έλ£Ή μ°μ°μ ( ) λ‘ κ°μΈμΌνλ€. μκ·Έλ¬λ©΄ μλ¬κ° λλ€. β ν¨μ μ μΈλ¬Έμ νμμ λ§μ§ μκΈ° λλ¬Έμ΄λ€.
function foo() {
// ...
}(); // SyntaxError: Unexpected token ')'- μ μ²λΌ κ·Έλ£Ή μ°μ°μ μμ΄ κΈ°λͺ ν¨μλ₯Ό μ μν΄λ μ€λ₯κ° λλ€. β μλ°μ€ν¬λ¦½νΈ μμ§μ΄ μ묡μ μΌλ‘ μννλ μΈλ―Έμ½λ‘ μλ μ½μ κΈ°λ₯μ μν΄ ν¨μ μ μΈλ¬Έμ΄ λλλ μμΉ, ν¨μ μ½λ λΈλ‘μ λ«λ μ€κ΄νΈ λ€μ β;β μ΄ μ묡μ μΌλ‘ μΆκ°κ° λκΈ° λλ¬Έμ΄λ€.
function foo() {}(); // => function foo() {};();- λ°λΌμ ν¨μ μ μΈλ¬Έ λ€μ ( ) λ ν¨μ νΈμΆνλ κ²μ΄ μλ κ·Έλ£Ή μ°μ°μλ‘ ν΄μλκΈ° λλ¬Έμ μλ¬κ° λ°μνλ€.
console.log(typeof (function f(){})); // function
console.log(typeof (function (){})); // function- κ·Έλ£Ή μ°μ°μλ‘ λ¬Άμ μ΄μ λ λ¨Όμ ν¨μ 리ν°λ΄λ‘ νκ°ν΄μ ν¨μ κ°μ²΄λ₯Ό μμ±νκΈ° μν΄μμ΄λ€.
- λ³΄ν΅ μ²«λ²μ§Έ λ°©μμ λ§μ΄ μ¬μ©νλ€.
// μ¦μ μ€ν ν¨μλ μΌλ° ν¨μμ²λΌ κ°μ λ°νν μ μλ€.
var res = (function () {
var a = 3;
var b = 5;
return a * b;
}());
console.log(res); // 15
// μ¦μ μ€ν ν¨μμλ μΌλ° ν¨μμ²λΌ μΈμλ₯Ό μ λ¬ν μ μλ€.
res = (function (a, b) {
return a * b;
}(3, 5));
console.log(res); // 15- μ¦μ μ€ν ν¨μλ μΌλ° ν¨μμ²λΌ κ°μ λ°νν μ μκ³ μΈμλ₯Ό μ λ¬ν μ μλ€.
- ν¨μκ° μκΈ° μμ μ νΈμΆνλ κ²μ μ¬κ· νΈμΆμ΄λΌκ³ νλ€.
- μκΈ° μμ μ νΈμΆνλ νμ, μ¦ μ¬κ· νΈμΆμ μννλ ν¨μ
- μ¬κ· ν¨μλ λ°λ³΅λλ μ²λ¦¬λ₯Ό μν΄ μ¬μ©νλ€.
- 10λΆν° 0κΉμ§ μΆλ ₯νλ ν¨μ
function countdown(n) {
for (var i = n; i >= 0; i--) console.log(i);
}
countdown(10);- λ°λ³΅λ¬Έμμ΄ κ΅¬νν μ μλ λ°©λ²μ΄ λ°λ‘ βμ¬κ· ν¨μβ
function countdown(n) {
if (n < 0) return;
console.log(n);
countdown(n - 1); // μ¬κ· νΈμΆ
}
countdown(10);- ν©ν λ¦¬μΌ ν¨μ
- 1λΆν° μκΈ° μμ κΉμ§μ λͺ¨λ μμ μ μμ κ³±μ νλ ν¨μ
// ν©ν 리μΌ(κ³μΉ)μ 1λΆν° μμ κΉμ§μ λͺ¨λ μμ μ μμ κ³±μ΄λ€.
// n! = 1 * 2 * ... * (n-1) * n
function factorial(n) {
// νμΆ μ‘°κ±΄: nμ΄ 1 μ΄νμΌ λ μ¬κ· νΈμΆμ λ©μΆλ€.
if (n <= 1) return 1;
// μ¬κ· νΈμΆ
return n * factorial(n - 1);
}
console.log(factorial(0)); // 0! = 1
console.log(factorial(1)); // 1! = 1
console.log(factorial(2)); // 2! = 2 * 1 = 2
console.log(factorial(3)); // 3! = 3 * 2 * 1 = 6
console.log(factorial(4)); // 4! = 4 * 3 * 2 * 1 = 24
console.log(factorial(5)); // 5! = 5 * 4 * 3 * 2 * 1 = 120- μ¬κ· ν¨μλ μμ μ 무ν μ¬κ· νΈμΆνλ€. κ·Έλμ ν¨μ λ΄μλ μ¬κ· νΈμΆμ λ©μΆ μ μλ νμΆ μ‘°κ±΄μ λ°λμ λ§λ€μ΄μΌ νλ€. β νμΆ μ‘°κ±΄μ΄ μμΌλ©΄ ν¨μκ° λ¬΄ν νΈμΆ,
β οΈ μ€ν μ€λ²νλ‘ μλ¬ λ°μ - μ¬κ· ν¨μλforλ¬Έμ΄λ while λ¬ΈμΌλ‘ ꡬν κ°λ₯νλ€.
- λ°λ³΅λ¬Έ μμ΄ κ΅¬νν μ μλ€λ μ₯μ
- 무ν λ°λ³΅μ λΉ μ§ μν, μ€ν μ€λ²νλ‘ μλ¬ λ°μν μ μλ λ¨μ μ΄ μμ΄ μ£Όμν΄μ μ¬μ©
- μ¦, λ°λ³΅λ¬Έλ³΄λ€λ μ¬κ·ν¨μλ₯Ό μ¬μ©νλ κ²μ΄ λ μ§κ΄μ μΌλ‘ μ΄ν΄νκΈ° μ¬μΈ λλ§ νμ μ μΌλ‘ μ¬μ©νλ κ²μ΄ λ°λμ§
- ν¨μ λ΄λΆμ μ μλ ν¨μ
- μ€μ²© ν¨μλ μΈλΆ ν¨μ λ΄λΆμμλ§ νΈμΆν μ μλ€.
- μμ μ ν¬ν¨νλ μΈλΆ ν¨μλ₯Ό λλ ν¬νΌ ν¨μμ μν
function outer() {
var x = 1;
// μ€μ²© ν¨μ
function inner() {
var y = 2;
// μΈλΆ ν¨μμ λ³μλ₯Ό μ°Έμ‘°ν μ μλ€.
console.log(x + y); // 3
}
inner();
}
outer();// nλ§νΌ μ΄λ€ μΌμ λ°λ³΅νλ€.
function repeat1(n) {
// iλ₯Ό μΆλ ₯νλ€.
for (var i = 0; i < n; i++) console.log(i);
}
repeat1(5); // 0 1 2 3 4
// nλ§νΌ μ΄λ€ μΌμ λ°λ³΅νλ€.
function repeat2(n) {
for (var i = 0; i < n; i++) {
// iκ° νμμΌ λλ§ μΆλ ₯νλ€.
if (i % 2) console.log(i);
}
}
repeat2(5); // 1 3- repeat1ν¨μμ repeat2μ ν¨μλ 곡ν΅μ μΈ λ‘μ§μ΄ μ‘΄μ¬νλ€.
- ν¨μ ν©μ± β λ³νμ§ μλ κ³΅ν΅ λ‘μ§μ 미리 μ μν΄λκ³ κ²½μ°μ λ°λΌ λ³κ²½λλ λ‘μ§μ μΆμνν΄μ ν¨μ μΈλΆμμ λ΄λΆλ‘ μ λ¬νλ κ²
// μΈλΆμμ μ λ¬λ°μ 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- μ΄μ²λΌ ν¨μμ λ§€κ°λ³μλ₯Ό ν΅ν΄ λ€λ₯Έ ν¨μμ λ΄λΆμ μ λ¬λλ ν¨μ β μ½λ°± ν¨μ
- λ§€κ° λ³μλ₯Ό ν΅ν΄ ν¨μμ μΈλΆμμ μ½λ°± ν¨μλ₯Ό μ λ¬λ°μ ν¨μ β κ³ μ°¨ ν¨μ repeat
- μ€μ²© ν¨μλ μΈλΆ ν¨μλ₯Ό λλ ν¬νΌ ν¨μμ μν , μ½λ°± ν¨μλ κ³ μ°¨ ν¨μλ₯Ό λλ ν¬νΌ ν¨μμ μν
- λ¨, μ€μ²© ν¨μλ κ³ μ λμ΄ μμ΄μ κ΅μ²΄νκΈ° κ³€λνμ§λ§ μ½λ°± ν¨μλ ν¨μ μΈλΆμμ κ³ μ°¨ ν¨μ λ΄λΆλ‘ μ£Όμ νκΈ° λλ¬Έμ μμ λ‘κ² κ΅μ²΄κ°λ₯νλ€. β κ³ μ°¨ ν¨μλ μ½λ°± ν¨μλ₯Ό μμ μ μΌλΆλΆμΌλ‘ ν©μ±
- κ³ μ°¨ ν¨μλ λ§€κ° λ³μλ₯Ό ν΅ν΄ μ λ¬λ°μ μ½λ°± ν¨μμ νΈμΆ μμ μ κ²°μ ν΄μ νΈμΆνλ€.
// μ΅λͺ
ν¨μ 리ν°λ΄μ μ½λ°± ν¨μλ‘ κ³ μ°¨ ν¨μμ μ λ¬νλ€.
// μ΅λͺ
ν¨μ 리ν°λ΄μ repeat ν¨μλ₯Ό νΈμΆν λλ§λ€ νκ°λμ΄ ν¨μ κ°μ²΄λ₯Ό μμ±νλ€.
repeat(5, function (i) {
if (i % 2) console.log(i);
}); // 1 3- μ½λ°± ν¨μκ° κ³ μ°¨ ν¨μ λ΄λΆμλ§ νΈμΆλλ€λ©΄ μ½λ°± ν¨μλ μ΅λͺ ν¨μ 리ν°λ΄λ‘ μ μνλ©΄μ κ³§λ°λ‘ μ λ¬νλ κ²μ΄ μΌλ°μ
- μ΄λ μ½λ°± ν¨μλ κ³ μ°¨ ν¨μκ° νΈμΆλ λλ§λ€ νκ°λμ΄ ν¨μ κ°μ²΄λ₯Ό μμ± β κ·Έλμ μ¬μ¬μ©λ κ°λ₯μ±μ΄ μλ€λ©΄ μΈλΆμμ μ μνλ κ²μ΄ ν¨μ¨μ
// μ½λ°± ν¨μλ₯Ό μ¬μ©ν μ΄λ²€νΈ μ²λ¦¬
// myButton λ²νΌμ ν΄λ¦νλ©΄ μ½λ°± ν¨μλ₯Ό μ€ννλ€.
document.getElementById('myButton').addEventListener('click', function () {
console.log('button clicked!');
});
// μ½λ°± ν¨μλ₯Ό μ¬μ©ν λΉλκΈ° μ²λ¦¬
// 1μ΄ νμ λ©μμ§λ₯Ό μΆλ ₯νλ€.
setTimeout(function () {
console.log('1μ΄ κ²½κ³Ό');
}, 1000);- μ½λ°± ν¨μλ λΉλκΈ° μ²λ¦¬μ νμ©λλ μ€μν ν¨ν΄
// μ½λ°± ν¨μλ₯Ό μ¬μ©νλ κ³ μ°¨ ν¨μ map
var res = [1, 2, 3].map(function (item) {
return item * 2;
});
console.log(res); // [2, 4, 6]
// μ½λ°± ν¨μλ₯Ό μ¬μ©νλ κ³ μ°¨ ν¨μ filter
res = [1, 2, 3].filter(function (item) {
return item % 2;
});
console.log(res); // [1, 3]
// μ½λ°± ν¨μλ₯Ό μ¬μ©νλ κ³ μ°¨ ν¨μ reduce
res = [1, 2, 3].reduce(function (acc, cur) {
return acc + cur;
}, 0);
console.log(res); // 6- μ½λ°± ν¨μλ λ°°μ΄ κ³ μ°¨ ν¨μμμλ μ¬μ©
- μμ ν¨μ
- μ΄λ€ μΈλΆ μνμ μμ‘΄νμ§ μκ³ λ³κ²½νμ§λ μλ, μ¦ λΆμ ν¨κ³Όκ° μλ ν¨μ
- λμΌν μΈμκ° μ λ¬λλ©΄ μΈμ λ λμΌν κ°μ λ°ννλ ν¨μ
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"π‘ ν¨μκ° μΈλΆ μνλ₯Ό λ³κ²½νλ©΄ μν λ³νλ₯Ό μΆμ νκΈ° μ΄λ €μμ§λ€. λ°λΌμ ν¨μ μΈλΆ μνμ λ³κ²½μ μ§μνλ μμν¨μλ₯Ό μ¬μ©νλ κ²μ΄ μ’λ€."
- ν¨μν νλ‘κ·Έλλ°μ μμ ν¨μμ 보쑰 ν¨μμ μ‘°ν©μ ν΅ν΄ μΈλΆ μνλ₯Ό λ³κ²½νλ λΆμ ν¨κ³Όλ₯Ό μ΅μνν΄μ λΆλ³μ±μ μ§ν₯νλ νλ‘κ·Έλλ° ν¨λ¬λ€μμ΄λ€. κ²°κ΅ μμ ν¨μλ₯Ό ν΅ν΄ λΆμ ν¨κ³Όλ₯Ό μ΅λν μ΅μ ν΄ μ€λ₯λ₯Ό νΌνκ³ νλ‘κ·Έλ¨μ μμ μ±μ λμ΄λ €λ λ Έλ ₯μ μΌνμ΄λ€.
- μλ°μ€ν¬λ¦½νΈμμ μ 곡νλ 7κ°μ§ λ°μ΄ν° νμ (μ«μ, λ¬Έμμ΄, λΆλ¦¬μΈ, null, undefined, μ¬λ², κ°μ²΄ νμ )μ ν¬κ² μμ νμ κ³Ό κ°μ²΄ νμ μΌλ‘ κ΅¬λΆ κ°λ₯
| μμ νμ | κ°μ²΄ νμ |
|---|---|
| λ³κ²½ λΆκ°λ₯ν κ° | λ³κ²½ κ°λ₯ν κ° |
| λ³μμλ μ€μ κ° μ μ₯ | λ³μμλ μ°Έμ‘°κ° μ μ₯ |
| λ€λ₯Έ λ³μμ ν λΉνλ©΄ μλ³Έμ μμκ°μ΄ 볡μ¬λμ΄ μ λ¬ | λ€λ₯Έ λ³μμ ν λΉνλ©΄ μλ³Έμ μ°Έμ‘° κ°μ΄ 볡μ¬λμ΄ μ λ¬ |
| κ°μ μν μ λ¬ | μ°Έμ‘°μ μν μ λ¬ |
- **μ΅μ λ² ν¨ν΄(observer pattern)**μΒ κ°μ²΄μ μν λ³νλ₯Ό κ΄μ°°νλ κ΄μ°°μλ€, μ¦ μ΅μ λ²λ€μ λͺ©λ‘μ κ°μ²΄μ λ±λ‘νμ¬ μν λ³νκ° μμ λλ§λ€ λ©μλ λ±μ ν΅ν΄ κ°μ²΄κ° μ§μ λͺ©λ‘μ κ° μ΅μ λ²μκ² ν΅μ§νλλ‘ νλ λμμΈ ν¨ν΄μ΄λ€.