
π‘ ν¨μλ?
ν¨μ : νΉμ ν μΌμ μννλ μ½λμ μ§ν©
μ¬μ¬μ© κ°λ₯, λμ κ°λ μ±, μ μ§ λ³΄μμ±
μ€λ³΅λλ μΌμ΄ μλ€λ©΄, ν¨μ λ¨μλ‘ μ λ¬Άλ κ²μ΄ μ€μνλ€
ν¨μκ° νλ μΌ μ λνλΌ μ μλ μ΄λ¦μ μ§μ΄μΌνλ€.
λ§€κ°λ³μ μ΄λ¦λ μλ―Έμκ² μ§μ΄μΌ νλ€.
π‘ ν¨μμ κΈ°λ³Έ
ν¨μλ₯Ό νΈμΆνμ§ μμΌλ©΄, μ μΈλ ν¨μλ μ€νλμ§ μλλ€.
μ¬μ©μμ 1
function add(a, b){
return a + b;
}
const result = add(5, 3);
μ¬μ©μμ 2
function fullName(firstName, lastName){
return `${firstName} ${lastName}`;
}
const userName = fullName('λͺ
μ', 'ν');
π‘ ν¨μμ λ©λͺ¨λ¦¬
ν¨μλ κ°μ²΄ νμ μ΄λ―λ‘, ν¨μμ μ½λλΈλμ λ©λͺ¨λ¦¬ HeapλΆλΆμ μ μ₯λλ€.
ν¨μμ΄λ¦μ ν¨μμ μ½λλΈλμ΄ μλ κ³³μ μ£Όμλ₯Ό λ΄κ³ μλ€.
function add(a, b){
return a + b;
}
const sum = add; -> sumμ addμ μ½λλΈλμ κ°λ₯΄ν€κ² λλ€.
sum(1, 2) === add(1, 2) -> μμ ν λμΌνλ€.
μΆκ°λ‘, ν¨μλ₯Ό νΈμΆν λλ νμ μκ΄νΈ λ¬Άμ΄μΌνλ€.
add() != add
π‘ λ°νμ΄λ?
returnμ λͺ μμ μ νμ§ μμΌλ©΄ μλμΌλ‘ Undefinedμ΄ λ°νλ¨!
return -> ν¨μλ₯Ό μ’ λ£μν¬ μ μλ€.
function add(a, b){
// return undefined
}
const result = add(1, 2)
console.log(result); -> undefined
function print(text){
console.log('text');
}
const outcome = print('hello')
console.log(outcome) -> undefined
function print(num) {
if(num < 0){
return; --> returnμ λ§λλ©΄ ν¨μλ₯Ό μ’
λ£μν¨λ€.
}
else {
console.log(num);
}
}
π‘ ν¨μμ μΈμ
λ§€κ°λ³μλ₯Ό μ λ¬νμ§ μμΌλ©΄ λ§€κ°λ³μμ κΈ°λ³Έ κ°μ Undefinedμ΄λ€.
λ§€κ°λ³μλ₯Ό μ λ¬ λ°μ§ λͺ»ν κ²½μ°λ₯Ό λλΉνμ¬, λ§€κ°λ³μμ κΈ°λ³Έ κ°μ ν¨μλ₯Ό μ μΈν λ μ€μ ν μ μλ€.
Rest Parameters : λͺκ°μ μΈμκ° μ¬ κ±΄μ§ μ μ μμ λ, μΈμλ€μ λ°°μ΄ ννλ‘ μ ννμ¬ μ μ₯νλ€.
function add(a, b){
console.log(a);
console.log(b);
console.log(arguments); -> ν¨μ λ΄λΆμμ μ κ·Όμ΄ κ°λ₯ν arguments κ°μ²΄λ λ§€κ°λ³μμ μ 보λ₯Ό λ΄κ³ μλ€.
return a + b;
}
add() -> λ§€κ°λ³μλ₯Ό μ λ¬νμ§ μμΌλ©΄, λ§€κ°λ³μλ undefined κΈ°λ³Έκ°μ΄λ€.
function add(a = 1, b = 2) -> λ§€κ°λ³μκ° μ λ¬λμ§ μμ λλ₯Ό λλΉνμ¬ κΈ°λ³Έ κ° μ€μ κ°λ₯
{
return a + b;
}
Rest Parameters
function sum(a, b, ...numbers) -> λͺκ°μ μΈμκ° μ¬ κ±΄μ§ μ μ μμ λ μ¬μ©νλ€.
... -> λ°°μ΄ ννλ‘ μ μ₯λλ€.
π‘ ν¨μ ννμ
ν¨μ μ μΈλ¬Έκ³Ό ννμμ μ°¨μ΄μ ?
λͺ¨λ ννμμ λ¬Έμ ν¬ν¨λλ©°, κ°μΌλ‘ νκ°λ μ μλ κ²λ€μ΄ ννμμ΄λ€.
ν¨μ μ μΈλ¬Έ function name() { }
ν¨μ ννμ const name = function () { }
let add = function (a, b) {
return a + b;
};
addμ μ λ¬λλ κ²μ μ½λλΈλμ μ£Όμκ° ν λΉλλ€.
νμ΄ν ν¨μ
const name = () => { } function μλ΅λ λΆλΆ
μ½λλΈλ μμμ κ°λ§ 리ν΄νλ κ²½μ°λΌλ©΄, κ΄νΈ, λ¦¬ν΄ μλ΅κ°λ₯
ν¨μμ체λ κ°μΌλ‘ κ³μ°λ μ μλ ννμμ΄λ€.
<ν¨μ μ μΈμ : νΈμ΄μ€ν μν₯ λ°μ, μ μΈ μμμ νΈμΆ κ°λ₯>
<ν¨μ ννμ : νΈμ΄μ€ν μν₯ λ°μ§ μμ, ν΄λ‘μ , μ½λ°± μ¬μ© κ°λ₯>
IIFE (Immedicately-Invoked Function Expressions)
// ν¨μ μ μΈλ¬Έ
function add(a, b){
return a + b;
}
// ν¨μ ννμ
const add = function (a, b){
return a + b;
}
μ΄λ addμ ν λΉλλ κ²μ μ½λλΈλμ΄ μμΉν λ©λͺ¨λ¦¬ μ£Όμμ΄λ€.
// νμ΄ν ν¨μ
const add = (a, b) => {return a + b;}
functionμ΄ μλ΅λ λ²μ (νμ΄ν ν¨μ)
// νμ΄ν ν¨μ2
μ½λλΈλμ λ΄μ©μ΄ λ°λ‘ κ°μ λ°ννλ κ²½μ°λΌλ©΄, return κ³Ό κ΄νΈ μλ΅κ°λ₯
const add = (a, b) => a + b;
// IIFE
(function run() {
console.log('π‘')
}) ();
κ΄νΈλ‘ λ¬ΆμΌλ©΄ ν¨μλ κ°(λ©λͺ¨λ¦¬μ£Όμ)μΌλ‘ ννλκ³ , ()λ‘ κ·Έ μ£Όμλ₯Ό νΈμΆν¨
π‘ λλμ΄ μ½λ°±ν¨μ
ν¨μμ μΈμλ‘ ν¨μκ° λ€μ΄κ°λ κ²μ μ½λ°±ν¨μλΌκ³ νλ€.
μ΄λ μΈμλ‘ λ€μ΄κ°λ κ²μ ν¨μμ μ½λλΈλμ΄ λ€μ΄μλ μ£Όμκ°, μ¦ λ νΌλ°μ€μ΄λ€.
ν¨μμ μΈμλ‘ ν¨μκ° λ€μ΄μ€λ©΄ κ·Έ μ¦μ νΈμΆμ΄ λλ κ²μ΄ μλλΌ, ν¨μ λ΄λΆμμ νμν μκ°μ νΈμΆμ΄ λλ€
// μ½λ°±ν¨μ (ν¨μμ΄λ¦μ μΈμλ‘ λ°λλ€.)
const add = (a, b) => a + b;
const multiply = (a, b) => a * b;
const pow = (a, b) => a ** b;
// μ λ¬λ actionμ μ½λ°±ν¨μμ΄λ€.
// μ λ¬λ λΉμμ ν¨μλ₯Ό λ°λ‘ νΈμΆν΄μ λ°νλ κ°μ μ λ¬λ°λ κ²μ΄ μλ, ν¨μλ₯Ό κ°λ¦¬ν€κ³ μλ ν¨μμ λ νΌλ°μ€(μ°Έμ‘°κ°)κ° μ λ¬λλ€.
// κ²°λ‘ , μ½λ°±ν¨μλ κ³ μ°¨ν¨μ μμμ νμν μκ°μ νΈμΆμ΄ λμ€μ λ¨
function calculator(a, b, action) {
let result = 0;
result = action(a, b);
console.log(result);
return result;
}
calculator(1, 3, add);
calculator(5, 4, multiply);
calculator(5, 2, pow);
π‘ ν¨μ λ§λ€κΈ° ν΄μ¦
function printNum(num){
console.log(num);
}
function printTwiceNum(num){
console.log(2 * num)
}
function iterate(max, action){
for(let i = 0; i < max; i++){
action(i);
}
}
iterate(10, printNum); == iterate(10, (num) => {console.log(num);})
iterate(10, printTwiceNum); == iterate(10, (num) => {console.log(2 * num);})
μ€μ μ¬μ© μμ
setTimeout(callback, 1000); => setTimeout(() => {console.log('Hi'), 1000ms})
π‘ μ€μν λΆλ³μ±μ λν΄
Immutability == unchangable λ³κ²½ν μ μλ(λ³κ²½ νμ§ μλ κ²μ΄ μ’μ!!)
ν¨μλ΄λΆμμ μΈλΆλ‘λΆν° μ£Όμ΄μ§ μΈμμ κ°μ λ³κ²½νλ κ²μ λ§€μ° μ’μ§ μλ€.
μμ κ°μ΄ μ λ¬λλ κ²½μ°λ λ³Έλμ λ³μμλ μν₯μ λΌμΉμ§ μμ§λ§, κ°μ²΄νμ μ κ²½μ°μλ λ©λͺ¨λ¦¬μ£Όμκ° μ λ¬λλ―λ‘, ν¨μλ΄λΆμμ λ³κ²½νλ©΄, κ·Έ μ€μ μ κ°μ΄ λ³κ²½μ΄ λλ€.
// μμκ° - κ°μ μν 볡μ¬
// κ°μ²΄κ° - λ©λͺ¨λ¦¬μ£Όμ(μ°Έμ‘°)μ μν 볡μ¬(λ©λͺ¨λ¦¬μ£Όμ)
function display(num){
num = 5;
console.log(num);
}
const number = 3;
display(number) -> 5
console.log(number) -> 3
=> κ°μ μν 볡μ¬μ΄λ―λ‘, μλ κ°μ λ³νμ§ μμλ€.
function displayObj(obj){
obj.name = 'Son';
console.log(obj);
}
const son = {
name: 'Han'
}
displayObj(son) -> 'Son'
console.log(son.name) -> 'Son'
=> κ°μ²΄ νμ
μ κ²½μ° μ°Έμ‘°κ°μ΄ μ λ¬λλ―λ‘, λ³Έλμ κ°λ λ³κ²½μ΄λλ€.
// μ λ§ λ°κΏμΌ νλ€λ©΄?
function changeName(obj){
return {...obj, name: 'bob'};
}
π‘Β μΌκΈ κ°μ²΄, κ³ μ°¨ ν¨μ
μΌκΈ κ°μ²΄(ν¨μ)λ ν¨μλ₯Ό λ³μλ€λ£¨λ―μ΄ λ€λ£° μ μλ€λ κ²μ μλ―Έν¨
ν¨μλ₯Ό λ³μμ λ£μ μλμκ³ νλΌλ―Έν°λ‘ λ£μ΄μ€ μ μμ
κ³ μ°¨ν¨μλ νλΌλ―Έν°λ‘ ν¨μλ₯Ό λ°κ³ μν λ μ€νν μ μλ ν¨μμ