π ν¨μκ° μκΈ° μμ μ νΈμΆνλ κ²μ μ¬κ·νΈμΆμ΄λΌ νλ€. μ¬κ· ν¨μλ μκΈ° μμ μ νΈμΆνλ νμ,μ¦ μ¬κ· νΈμΆμ μννλ ν¨μλ₯Ό λ§νλ€.
π μ¬κ· ν¨μλ λ°λ³΅λλ λμμ μν΄ μ¬μ©νλ€.
// factorialμ 1λΆν° μμ κΉμ§μ λͺ¨λ μμ μ μμ κ³±μ΄λ€.
function factorial(n) {
if (n <= 1) {
return n // νμΆμ‘°κ±΄
}
return n * factorial(n - 1) // μ¬κ·νΈμΆ
}
undefined
factorial(0); // 0! = 1
factorial(1); // 1! = 1
factorial(2); // 2! = 2 * 1 = 2
factorial(3); // 3! = 3 * 2 * 1 = 6
factorial(4); // 4! = 4 * 3 * 2 * 1 = 24
factorial(5); // 5! = 5 * 4 * 3 * 2 * 1 = 120
function reverse(text) {
text += ''
if(text.length <= 1) {
return text
}
return reverse(text.slice(1)) + text[0]
}
// reverse('hello') == reverse('ello') + 'h' == 'olle' + 'h'
// reverse('ello') == reverse('llo') + 'e' == 'oll' + 'e'
// reverse('llo') == reverse('lo') + 'l' == 'ol' + 'l'
// reverse('lo') == reverse('o') + 'l' == 'o' + 'l'
// reverse('o') == 'o'
// 1, 1, 2, 3, 5, 8, 13, 21 <-- νΌλ³΄λμΉ μμ΄
function fib(n){
if(n <= 2) {
return n
}
return fib(n-1) + fib(n-2)
}
// μΌμͺ½ functionλ§ λ°λΌκ°μΌλ
// fib(4) == fib(3) + fib(2) == 5
// fib(3) == fib(2) + fib(1) == 3
// fib(2) == 2
// fib(1) == 1
// μ€λ₯Έμͺ½ κ°μΈ fib(2)λ₯Ό λ€μ ν΄μΌνλ μν©!!
// fib(2) == 2
λ©λͺ¨μ΄μ μ΄μ
// νΈμΆλλ κ²μ΄ λ©λͺ¨λ¦¬λ₯Ό μ°¨μ§νκ³ μμΌλ―λ‘ μλ κΈ°λ²μ μ μ ν λ―Ήμ±ν΄μ μ¬μ©ν νμκ° μμ
// λ°λ³΅λ¬Έ, λ€μ΄λλ―Ή νλ‘κ·Έλλ°(λ©λͺ¨μ΄μ μ΄μ
(νν₯μ), νλ·Έλ μ΄μ
(μν₯μ))
let fibo_cache = []
function fibo(n){
if (n in fibo_cache) {
return fibo_cache[n]
}
fibo_cache[n] = n < 2 ? n : fibo(n-2) + fibo(n-1)
return fibo_cache[n]
}
// fibo_cache = [0, 1, 1, 2, fibo(2) + fibo(3)]
// fibo(4) == fibo_cache[4] == fibo(2) + fibo(3)
// fibo(2) == fibo_cache[2] == fibo(0) + fibo(1)
// fibo(0) == fibo_cache[0] == 0
// fibo(1) == fibo_cache[1] == 1
// fibo(3) == fibo_cache[3] == fibo(1) + fibo(2)
// fibo(1) == 1
// fibo(2) == 1
μ¬κ·ν¨μλ ν¨μλ₯Ό νΈμΆνκ³ κ°μ λ°ννλ©΄ κ²°κ³Όκ°μ΄ μ¬λΌμ§κΈ° λλ¬Έμ ν¨μ¨μ±μ μ’μ§ μλ€!
νμ§λ§, λ©λͺ¨μ΄μ μ΄μ μ μ¬μ©νλ©΄ λ°λ³΅λλ κ²°κ³Όλ₯Ό λ©λͺ¨λ¦¬μ μ μ₯ν΄μ κ°μ κ²°κ³Όλ₯Ό λ³΄λ€ λΉ λ₯΄κ² μ€νμμΌμ€λ€. ( λ©λͺ¨λ¦¬μ ν¨μ¨μ± β)
π©βπ« μ¬κ· ν¨μλ μμ μ 무νμΌλ‘ μ¬κ· νΈμΆμ ν μ μλ€. λ°λΌμ μ¬κ· ν¨μμμλ νμΆ μ‘°κ±΄μ λ°λμ λ§λ€μ΄λμΌ νλ€. μ κ·ΈλΌ λ¬΄μ ν νΈμΆλ‘ μλ¬κ° λ°μν¨.
π©βπ« μ¬κ·ν¨μλ‘ λ§λ€ μ μλ κ²λ€μ μ¬λ§νλ©΄ for, whileμ²λΌ λ°λ³΅λ¬ΈμΌλ‘λ λ§λ€μ΄ μ€ μ μλ€. λ€λ§ μ¬κ·ν¨μλ 무ν λ°λ³΅μ λΉ μ§ μνμ΄ μμΌλ, μ¬κ· ν¨μλ₯Ό μ¬μ©νλ νΈμ΄ λ μ§κ΄μ μΌλ‘ μ΄ν΄ν μ μμ μν©μμλ§ μ¬μ©νλ κ²μ΄ μ’λ€.(νΈμΆ νμλ§νΌ λ©λͺ¨λ¦¬ μλΉλμ΄ λκΈ° λλ¬Έμ λ°λ³΅λ¬Έμ μ°λκ² λ©λͺ¨λ¦¬ 곡κ°μ λ μ κ² μ°¨μ§νλ€.)
μ μλμλ§μ μ¦μ μ€νλλ ν¨μ. μ΄ μ¦μ μ€ν ν¨μλ λ¨ ν λ²λ§ νΈμΆλλ©° λ€μ νΈμΆμ΄ λΆκ°νλ€.
// μ΅λͺ
μ¦μ μ€ν ν¨μ
(function () {
let a = 1;
let b = 2;
return a + b;
}());
// κΈ°λͺ
μ¦μ μ€ν ν¨μ
(function foo() {
let a = 3;
let b = 5;
return a * b;
}());
foo(); // ReferenceError: foo is not defined
// μ΄μ°¨νΌ μ€ννμ§ λͺ»ν΄μ μλ―Έκ°μμ.
// λ©λͺ¨λ¦¬ ν¨μ¨μ μΌλ‘ κ΄λ¦¬νκΈ° μν΄ λ°λ‘ μ€νν΄μΌ νλ κ²λ€μ μ¦μ μ€νν¨μλ‘ κ΄λ¦¬
```μμ 1
let data = [{
λ° : 1,
λ² : 1,
μ΄λ¦ : "νΈμ€",
μ€κ°κ³ μ¬μ μ : 55
}, {
λ° : 1,
λ² : 2,
μ΄λ¦ : "κΈΈλ",
μ€κ°κ³ μ¬μ μ : 60
}, {
λ° : 1,
λ² : 3,
μ΄λ¦ : "μν¬",
μ€κ°κ³ μ¬μ μ : 30
}, {
λ° : 1,
λ² : 4,
μ΄λ¦ : "μ² μ",
μ€κ°κ³ μ¬μ μ : 20
}, {
λ° : 1,
λ² : 5,
μ΄λ¦ : "κ·λ¦¬",
μ€κ°κ³ μ¬μ μ : 100
}]
console.log(data.map(x => x.μ€κ°κ³ μ¬μ μ))
console.log(data.map(x => [x.μ΄λ¦,x.μ€κ°κ³ μ¬μ μ]))
let data = [[1, 2, 3], [4, 5, 6], [7, 8, 9]];
let newData = data.map(a => a.map(n => n * 2));
let νμμ 보 = [{
μμ΄λ: 'jjang',
ν¨μ€μλ: '5dbfbded05f34de754e8f265448be17934580556b488c0461fd12d211a87aaa5',
μ±λ³: 'λ¨',
ν΄λν°λ²νΈ: '010-5004-0000',
μ΄λ©μΌ: 'hojun1@gmail.com',
κ°μ
μ°λ: '2020-12-02',
μ£Όμ μμμΉ: '125.242.161.149'
}, {
μμ΄λ: 'jjang2',
ν¨μ€μλ: '5dbfbded05f34de754e8f265448be17934580556b488c0461fd12d211a87aaa5',
μ±λ³: 'λ¨',
ν΄λν°λ²νΈ: '010-5004-0000',
μ΄λ©μΌ: 'hojun2@gmail.com',
κ°μ
μ°λ: '2021-12-02',
μ£Όμ μμμΉ: '125.242.161.149'
}, {
μμ΄λ: 'jjang3',
ν¨μ€μλ: '5dbfbded05f34de754e8f265448be17934580556b488c0461fd12d211a87aaa5',
μ±λ³: 'μ¬',
ν΄λν°λ²νΈ: '010-5004-0000',
μ΄λ©μΌ: 'hojun3@gmail.com',
κ°μ
μ°λ: '2021-12-02',
μ£Όμ μμμΉ: '125.242.161.149'
}, {
μμ΄λ: 'jjang4',
ν¨μ€μλ: '5dbfbded05f34de754e8f265448be17934580556b488c0461fd12d211a87aaa5',
μ±λ³: 'μ¬',
ν΄λν°λ²νΈ: '010-5004-0000',
μ΄λ©μΌ: 'hojun4@gmail.com',
κ°μ
μ°λ: '2020-12-02',
μ£Όμ μμμΉ: '125.242.161.149'
}];
// 1λ² λ¨μμΈ μ¬λ
νμμ 보.filter(el => el.μ±λ³ === 'λ¨');
// 2λ² λ¨μμ΄λ©΄μ 2021λ
λμ κ°μ
νμ λΆ
// 2.1
νμμ 보.filter(el => el.μ±λ³ === 'λ¨' && el.κ°μ
μ°λ.split('-')[0] === '2021');
// 2.2
νμμ 보.filter(el => el.μ±λ³ === 'λ¨' && el.κ°μ
μ°λ.slice(0, 4) === '2021');
// 3λ² μμ΄λκ° jjangμΈ μ¬λμ μ°Ύμμ£ΌμΈμ.
νμμ 보.find(user => user.μμ΄λ === 'jjang');
- μ¦μ μ€ν ν¨μλ μ체 scopeλ₯Ό νμ±νκΈ° λλ¬Έμ μΈλΆλ‘ μ κ·Όμ κ°λ₯νμ§λ§ μΈλΆμμ λ΄λΆλ‘λ μ κ·Όμ΄ λΆκ°νλ€. κ·Έλμ μ¦μ μ€ν ν¨μ μ¬μ©μ ν° λͺ©μ μ λ°μ΄ν° νλΌμ΄λ²μμ μ½λμ λͺ¨λνλΌκ³ ν μ μλ€.
- function(){} μ΄λ κ² λλ©΄ μ½λλ₯Ό ν΄μνλ parseλ μ΄κ²μ ν¨μ μ μΈλ¬ΈμΌλ‘ μΈμ§νλ€.
μ μΈλ¬Έμ κ°μΌλ‘ λ¨μ§ μκΈ° λλ¬Έμ () κ΄νΈλ‘ λ¬Άμ΄μ£Όμ΄ μ΄κ²μ΄ ν¨μννμμ΄λΌλ κ²μ λͺ μμ μΌλ‘ λνλ΄μ€μΌ νλ€.
- call by valueμ call by referenceλ λ³μλ κ°μ²΄λ±μ΄ ν¨μμ μΈμλ‘ λ€μ΄μ 맀κ°λ³μλ‘ μ λ¬λ λ μ΄λ€ λ°©μμΌλ‘ μ λ¬λ μ§λ₯Ό κ²°μ νλ λ°©μμ΄λ€.
λμ λ°©μμ κ°μμν μ λ¬, μ°Έμ‘°μ μν μ λ¬κ³Ό λμΌνλ€.
Call by value
κ°μ 볡μ¬λ λ§ κ·Έλλ 볡μ¬λ κ°μ μΈμλ‘ λ겨μ 맀κ°λ³μλ‘ μ λ¬νλ λ°©μμ΄λ€.
κΈ°λ³Έν(Primitive type)μ κ²½μ° call by value λ°©μμΌλ‘ μ λ¬λ¨.
let array = [100, 200, 300];
function test(a) {
a[0] = 1000;
}
test(array)
array
[1000, 200, 300]
Call by reference
μ£Όμκ°μ 볡μ¬λ μ€μ λ°μ΄ν°κ° μ‘΄μ¬νλ μ£Όμλ₯Ό κ°λ¦¬ν€λ μ£Όμκ°μ μΈμλ‘ λ겨μ 맀κ°λ³μλ‘ μ λ¬νλ λ°©μμ΄λ€. κ°μ²΄(Object, Array, Function)μ call by reference λ°©μμΌλ‘ μ λ¬λλ€.
let v = 100;
function test(a) {
a = 1000;
}
test(v)
v
100
let v = 100;
function test(a) {
a = 1000;
}
test(v)
v
100
- μ΄ μ½λλ‘ μ€λͺ μ ν΄λ³΄μλ©΄, λ€λ₯ΈμΈμ΄μμμ κ²½μ°μμλ vμ κ°μ΄ 1000μΌλ‘ λ°λμμ κ²μ΄λ€. μλ μμ ν μ£Όμκ° μ°Έμ‘°λ‘ μ°κ²°λμ΄ μκΈ° λλ¬Έμ΄λ€.
- νμ§λ§ JSλ κ°μ²΄μ νλ‘νΌν° κ°μ΄ μλ κ°μ²΄ μ체μ λ³κ²½μ νμ©νμ§ μλλ€. μ£Όμκ°μ μ°Έμ‘°νλ κ² μλλΌ μ£Όμκ°μ 볡μ¬ν΄ λκΈ°κΈ° λλ¬Έμ΄λ€.
- κ²°λ‘ μ μΌλ‘ λ κ°μ²΄λ μ£Όμμ μ΄λ¦μ κ°μ μ μμ§λ§ λ€λ₯Έ λ©λͺ¨λ¦¬ μ£Όμμ μ μ₯λ κ°μ²΄μ΄λ€.
Call by sharing
- μμ Call by valueμ Call by referenceμ νΉμ§μ΄ 짬λ½λ κ²μΌλ‘, Call by valueμ΄λ©΄μ Call by reference μΌ λ Call by sharingμ΄λΌκ³ νλ€.
π μλμ κ°μ νΉμ§ λλ¬Έμ jsμμλ call by sharingμ΄λΌ μκΈ°νλ€.
var a = {};
function test(b) {
b = 1000;
}
test(a)
a
{}
π argumentλ‘ μ λ¬λλ λ³μκ° μμκ°μΌ κ²½μ° call by valueμ²λΌ νκ°λκ³ , μλ κ²½μ°λ parameterμ μ°Έμ‘°(λ©λͺ¨λ¦¬ μ£Όμ)λ§ μ λ¬λλ€.