ν¨μλ μμ μ μννκ±°λ κ°μ κ³μ°νλ λ±μ κ³Όμ μ νννκ³ μ΄λ₯Ό νλμ λΈλ‘μΌλ‘ κ°μΈμ μ€ν λ¨μλ‘ λ§λ€μ΄ λμ κ²μ μλ―Ένλ€.
μλ°μ€ν¬λ¦½νΈμμλ ν¨μλ₯Ό ν¬κ² 4κ°μ§ λ°©λ²μΌλ‘ μ μνλ€.
ν¨μ μ μΈλ¬Έ
μλ°μ€ν¬λ¦½νΈμμ ν¨μλ₯Ό μ μΈν λ κ°μ₯ μΌλ°μ μΌλ‘ μ¬μ©νλ λ°©μ
function(a, b) {
return a + b
}
ν¨μ ννμ
λ€μ μμ μ²λΌ ν¨μλ ννμμΌλ‘λ μ¬μ©ν μ μλ€.
const sum = function (a, b) {
return a + b
}
sum(10, 24) // 24
π‘ μΌκΈ κ°μ²΄ : λ€λ₯Έ κ°μ²΄λ€μ μΌλ°μ μΌλ‘ μ μ© κ°λ₯ν μ°μ°μ λͺ¨λ μ§μνλ κ°μ²΄
ν¨μλ λ€λ₯Έ ν¨μμ 맀κ°λ³μλ λ°νκ°μ΄ λ μ μκ³ μ μμ μ²λΌ ν λΉλ κ°λ₯νλ€. -> μΌκΈ κ°μ²΄κ° λμ΄ μν 쑰건μ ν¨μλ λͺ¨λ κ°μ·μ!
ν¨μ μ μΈλ¬Έκ³Ό ννμμ μ°¨μ΄
νΈμ΄μ€ν κ³Ό κ΄λ ¨νμ¬ ν¨μ μ μΈλ¬Έκ³Ό ν¨μ ννμμ ν° μ°¨μ΄κ° μλ€.
ν¨μ μ μΈλ¬Έ
hello() // hello
function hello() {
console.log('hello')
}
hello() // hello
hello ν¨μ μ½λκ° μ€κ°μ μμμλ λΆκ΅¬νκ³ μ μμ μΌλ‘ μΆλ ₯μ΄ λλ€. μ΄λ ν¨μμ λν μ μΈμ μ€ν μ μ 미리 λ©λͺ¨λ¦¬μ λ±λ‘νλ μμ μΈ νΈμ΄μ€ν λλ¬Έμ μ½λ μμ μκ΄μμ΄ μ μ μΆλ ₯μ΄ λλ κ²μ΄λ€.
λ°λ©΄ ν¨μ ννμμ 보μ
ν¨μ ννμ
console.log(typeof hello === 'undefine') // true
hello() // Uncaught TypeError: hello is not a function
var hello = function () {
console.log('hello')
}
hello()
ν¨μ μ μΈλ¬Έκ³Ό λ€λ₯΄κ² helloμ undefinedκ° λ¨μμλ κ±Έ λ³Ό μ μλ€.
ν¨μ μ€νμ νκΈ° μ (λ°νμ μ )μ hello λ³μμ undefinedλ‘ μ΄κΈ°νκ° λ κ²μ΄λ€.
ν λΉλ¬Έμ΄ μ€νλλ μμ μΈ λ°νμ μμ μ ν¨μκ° ν λΉ λμ΄ λλ²μ§Έ hello()μλ μ μ μΆλ ₯μ΄ λλ€.
Function μμ±μ
const add = new function('a', 'b', 'return a + b')
add(10, 24) // 34
Function μμ±μλ₯Ό μ΄μ©νμ¬ ν¨μλ₯Ό λ§λ€ μλ μλλ° μ΄ λ°©λ²μ μΌλ°μ μΌλ‘ μ μ¬μ©νμ§ μλλ€.
κ·Έ μ΄μ λ μμ μ½λμμ 보μ΄λ€μνΌ.
맀κ°λ³μμ ν¨μμ λͺΈν΅μ λͺ¨λ λ¬Έμμ΄λ‘ μμ±ν΄μΌ νλ©°, μ΄ λ°©λ²μ μ½λμ μ κΈΈμ΄μ§λ€λ©΄ 볡μ‘ν΄μ§ κ²μ΄λ€.
μ΄ λ°©μμΌλ‘ νμ λλ ν¨μμ ν΄λ‘μ λν μμ±ν μ μλ€.
νμ΄ν ν¨μ
νμ΄ν ν¨μλ ES6μμ μλ‘ λμ λ ν¨μ μμ± λ°©μμ΄λ€.
const add = (a, b) => {
return a + b
}
const add = (a, b) => a + b
νμ΄ν ν¨μλ μΌλ° ν¨μμ λͺ κ°μ§ μ°¨μ΄μ μ΄ μλ€.
1. constructor μ¬μ© λΆκ°
const Car = (name) => {
this.name = name
}
// Uncaught TypeError: Car is not a constructor
const MyCar = new Car('νμ΄')
νμ΄ν ν¨μμμλ constructorλ₯Ό μ¬μ©ν μ μλ€. μ¦, μμ±μ ν¨μλ‘ μ¬μ© λΆκ°λ₯!!!
2. arguments μ‘΄μ¬ X
function hello() {
console.log(arguments)
}
// Arguments(3) [1, 2, 3, calle: f, Symbol(Symbol.iterator): f]
hello(1, 2, 3)
const hi = () => {
console.log(arguments)
}
// Uncaught ReferenceError: arguments is not defined
hi(1, 2, 3)
νμ΄ν ν¨μμμλ argumentsκ° μ‘΄μ¬νμ§ μλλ€.
3. this λ°μΈλ©μ΄ μμβοΈβοΈβοΈ
κ°μ₯ ν° μ°¨μ΄μ μ this λ°μΈλ©μμ λ³Ό μ μλ€.
μλ°μ€ν¬λ¦½νΈ λ°μΈλ© κ΄λ ¨ν΄μ ν¬μ€νΈλ₯Ό λ°λ‘ νλλ‘ νκ² λ€..
μΌλ¨ μ¬κΈ°μ μ°μ΄λ κ²λ§ κ°λ¨νκ² μ€λͺ νμλ©΄
μΌλ° ν¨μ -> λμ λ°μΈλ©
νμ΄ν ν¨μ -> μ μ λ°μΈλ©
μμ²λΌ λΆλ₯ν μ μλλ°
μΌλ°ν¨μλ ν¨μλ₯Ό νΈμΆν λ ν¨μκ° μ΄λ»κ² νΈμΆλμλμ§μ λ°λΌ thisμ λ°μΈλ©ν κ°μ²΄κ° λμ μΌλ‘ κ²°μ λλ€.
νμ΄ν ν¨μλ ν¨μλ₯Ό μ μΈν λ thisμ λ°μΈλ©ν κ°μ²΄κ° μ μ μΌλ‘ κ²°μ λλλ°
thisλ μΈμ λ μμ μ€μ½νμ thisλ₯Ό κ°λ¦¬ν¨λ€. μ¦, Lexical thisλ₯Ό κ°μ§λ€. (Lexical scopeλ λΉμ·ν κ°λ )
μΌλ° ν¨μ(λμ λ°μΈλ©)
function TraditionalFunctionExample() {
this.value = 42;
this.getValue = function() {
console.log('Traditional Function:', this.value); // 'this'λ νΈμΆνλ κ°μ²΄μ λ°μΈλ©λ©λλ€.
}
}
const obj1 = new TraditionalFunctionExample();
obj1.getValue(); // Traditional Function: 42
const obj2 = {
value: 100,
getValue: obj1.getValue
};
obj2.getValue(); // Traditional Function: 100 ('this'λ obj2μ λ°μΈλ©λ©λλ€.)
νμ΄ν ν¨μ(μ μ λ°μΈλ©)
function ArrowFunctionExample() {
this.value = 42;
this.getValue = () => {
console.log('Arrow Function:', this.value); // 'this'λ ArrowFunctionExampleμ 컨ν
μ€νΈμ λ°μΈλ©λ©λλ€.
}
}
const obj3 = new ArrowFunctionExample();
obj3.getValue(); // Arrow Function: 42
const obj4 = {
value: 100,
getValue: obj3.getValue
};
obj4.getValue(); // Arrow Function: 42 ('this'λ μ¬μ ν ArrowFunctionExampleμ 컨ν
μ€νΈλ₯Ό μ μ§ν©λλ€.)