π νμ΄ν ν¨μ(Arrow Functions)μ μΌλ° ν¨μμ μ°¨μ΄λ 무μμΈκ°μ?
μλ°μ€ν¬λ¦½νΈμμ νμ΄ν ν¨μ(Arrow Functions)λ ES6μμ λμ λ μλ‘μ΄ ν¨μ μ μ λ°©μμ΄μμ. κΈ°μ‘΄μ μΌλ° ν¨μ ννμκ³Ό λ¬λ¦¬, λ κ°κ²°ν λ¬Έλ²μ μ 곡νλ©°, this λ°μΈλ©κ³Ό κ΄λ ¨λ μ€μν μ°¨μ΄μ μ΄ μμ΄μ.
λΉμ λ₯Ό λ€μ΄λ³΄λ©΄, μΌλ° ν¨μλ μλ‘μ΄ λ§₯λ½μ νμ±νμ¬ λ
립μ μΈ νλμ νλ 주체λΌλ©΄, νμ΄ν ν¨μλ κ·Έμ μ£Όλ³ νκ²½μ λ°λΌκ°λ ννμ νλμ ν΄μ. μ΄ λλ¬Έμ this
λ₯Ό λ€λ£¨λ λ°©μμ ν° μ°¨μ΄κ° μλ΅λλ€.
π₯οΈ νμ΄ν ν¨μμ μΌλ° ν¨μμ μ°¨μ΄μ
1. λ¬Έλ²μ μ°¨μ΄
- μΌλ° ν¨μλ
function
ν€μλλ₯Ό μ¬μ©ν΄ μ μνκ³ , νμ΄ν ν¨μλ=>
λ₯Ό μ¬μ©ν΄ μ μν΄μ.
// μΌλ° ν¨μ
function greet(name) {
return "Hello, " + name;
}
// νμ΄ν ν¨μ
const greet = (name) => {
return "Hello, " + name;
};
// νμ΄ν ν¨μ - λ κ°κ²°ν νν
const greet = name => "Hello, " + name;
νμ΄ν ν¨μλ λ μ§§κ³ κ°κ²°νκ² μΈ μ μμ΄μ.
νΉν λ¨μΌ μΈμμ λ¨μΌ λ°νλ¬Έμ κ°μ§ λλ μ€κ΄νΈμ return ν€μλλ μλ΅ν μ μμ΄μ.
2. this
λ°μΈλ©μ μ°¨μ΄
- μΌλ° ν¨μλ νΈμΆλλ μμ μ thisκ° λμ μΌλ‘ κ²°μ λΌμ. μ¦,
this
κ° μ€ν 컨ν μ€νΈμ λ°λΌ λ¬λΌμ§ μ μμ΄μ. - νμ΄ν ν¨μλ μ μ μΌλ‘ μμ μ€μ½νμ thisλ₯Ό κ·Έλλ‘ κ°μ Έμμ μ¬μ©ν΄μ. μ¦, νμ΄ν ν¨μ λ΄μμμ
this
λ νμ μΈλΆ νκ²½μ λ°λ₯΄κ² λ©λλ€.
const person = {
name: "μ² μ",
greet: function() {
console.log("Hello, " + this.name);
}
};
person.greet(); // "Hello, μ² μ"
// μΌλ° ν¨μμμμ this λ¬Έμ
const personWithIssue = {
name: "μ² μ",
greet: function() {
setTimeout(function() {
console.log("Hello, " + this.name); // μ¬κΈ°μ thisλ μ μ κ°μ²΄λ₯Ό κ°λ¦¬ν΄
}, 1000);
}
};
personWithIssue.greet(); // "Hello, undefined"
// νμ΄ν ν¨μμμμ this ν΄κ²°
const personWithArrowFunction = {
name: "μ² μ",
greet: function() {
setTimeout(() => {
console.log("Hello, " + this.name); // μ¬κΈ°μ thisλ μμ μ€μ½νμΈ personWithArrowFunctionμ κ°λ¦¬ν΄
}, 1000);
}
};
personWithArrowFunction.greet(); // "Hello, μ² μ"
μΌλ° ν¨μμμλ thisκ° μ μ κ°μ²΄λ₯Ό μ°Έμ‘°νκ² λμ΄ λ¬Έμ κ° λ°μν μ μμ΄μ.
κ·Έλ¬λ νμ΄ν ν¨μλ μμ μ€μ½νμ thisλ₯Ό κ·Έλλ‘ μ¬μ©νλ―λ‘, μ΄λ° λ¬Έμ λ₯Ό λ°©μ§ν μ μμ΄μ.
3. arguments
κ°μ²΄
- μΌλ° ν¨μμμλ μ묡μ μΌλ‘
arguments
κ°μ²΄λ₯Ό μ¬μ©ν μ μμ΄μ. μ΄λ ν¨μλ‘ μ λ¬λ λͺ¨λ μΈμλ€μ λ°°μ΄κ³Ό λΉμ·ν κ°μ²΄μμ. - νμ΄ν ν¨μλ
arguments
κ°μ²΄λ₯Ό κ°μ§ μμμ. λμ , νμνλ€λ©΄ rest νλΌλ―Έν°( ...args )λ₯Ό μ¬μ©ν΄μΌ ν΄μ.
// μΌλ° ν¨μμ arguments
function sum() {
console.log(arguments); // [1, 2, 3]
return Array.from(arguments).reduce((acc, curr) => acc + curr);
}
console.log(sum(1, 2, 3)); // 6
// νμ΄ν ν¨μμμλ arguments μ¬μ© λΆκ°
const sumArrow = () => {
console.log(arguments); // μ€λ₯ λ°μ
};
sumArrow(1, 2, 3); // Uncaught ReferenceError: arguments is not defined
// νμ΄ν ν¨μμμ rest νλΌλ―Έν° μ¬μ©
const sumArrowWithRest = (...args) => {
return args.reduce((acc, curr) => acc + curr);
};
console.log(sumArrowWithRest(1, 2, 3)); // 6
νμ΄ν ν¨μμλ arguments κ°μ²΄κ° μκΈ° λλ¬Έμ, μ λ¬λ μΈμλ€μ λ€λ£¨κΈ° μν΄μλ rest νλΌλ―Έν°λ₯Ό μ¬μ©ν΄μΌ ν΄μ.
π€ νμ΄ν ν¨μμ μΌλ° ν¨μ, μΈμ μ¬μ©ν΄μΌ ν κΉμ?
νμ΄ν ν¨μμ μΌλ° ν¨μλ κ°κ° λ€λ₯Έ μ©λμ μ ν©ν΄μ. μ£Όλ‘ thisμ λμκ³Ό κ΄λ ¨λ μν©μμ μ΄λ€ ν¨μλ₯Ό μ¬μ©ν μ§ κ²°μ νκ² λΌμ.
- νμ΄ν ν¨μλ μ£Όλ‘ μ½λ°± ν¨μλ this λ°μΈλ©μ΄ νμ μλ κ²½μ°μ μ μ©ν΄μ. μμ μ€μ½νμ thisλ₯Ό μ μ§νκΈ° λλ¬Έμ, μ΄λ²€νΈ μ²λ¦¬κΈ°λ λΉλκΈ° ν¨μ λ΄μμ thisκ° κ³ μ λμ΄μΌ ν λ μ μ©νκ² μ¬μ©ν μ μμ΄μ.
setTimeout
, λ°°μ΄ λ©μλ (map
,filter
,forEach
λ±)μμ μμ£Ό μ¬μ©λλ©°, 짧μ μ½λ λΈλ‘μ ννν λ νΉν ν¨κ³Όμ μ΄μμ. - μΌλ° ν¨μλ λμ μΌλ‘ thisλ₯Ό λ°μΈλ©ν΄μΌ νλ κ²½μ°μ μ¬μ©λΌμ. λν ν¨μκ° νΈμΆλ λμ λ§₯λ½μ λ°λΌ thisκ° λ¬λΌμ§λ κ²½μ°λ, arguments κ°μ²΄λ₯Ό μ¬μ©ν νμκ° μμ λ μ 리ν΄μ. κ°μ²΄μ λ©μλλ₯Ό μ μν λλ μΌλ° ν¨μκ° μ ν©ν΄μ.
1. λ°°μ΄ λ©μλμμ νμ΄ν ν¨μ μ¬μ©νκΈ°
const numbers = [1, 2, 3, 4, 5];
// νμ΄ν ν¨μλ‘ κ°λ¨νκ² μμ±
const doubled = numbers.map(num => num * 2);
console.log(doubled); // [2, 4, 6, 8, 10]
λ°°μ΄μ κ° μμλ₯Ό λ³ννλ κ³Όμ μμλ νμ΄ν ν¨μκ° μ½λμ κ°κ²°ν¨μ μ μ§νλ λ° λ§€μ° ν¨κ³Όμ μ΄μμ.
thisκ° νμνμ§ μμ μμν μ°μ°μ μνν λ, νμ΄ν ν¨μκ° κΉλν ν΄κ²°μ± μ΄ λ©λλ€.
2. κ°μ²΄ λ©μλμμ μΌλ° ν¨μ μ¬μ©νκΈ°
const person = {
name: "μ§λ―Ό",
age: 28,
greet: function() {
console.log("μλ
νμΈμ, μ λ " + this.name + "μ΄κ³ , λμ΄λ " + this.age + "μ΄μ
λλ€.");
}
};
person.greet();
// μλ
νμΈμ, μ λ μ§λ―Όμ΄κ³ , λμ΄λ 28μ΄μ
λλ€.
μ΄ μμ μμλ μΌλ° ν¨μλ₯Ό μ¬μ©νμ¬ κ°μ²΄μ λ©μλλ₯Ό μ μνμ΄μ.
μΌλ° ν¨μλ νΈμΆλλ 컨ν μ€νΈμ λ°λΌ thisλ₯Ό λ€λ₯΄κ² λ°μΈλ©νκΈ° λλ¬Έμ, μ΄ ν¨μλ person κ°μ²΄μ nameκ³Ό age μμ±μ μ κ·Όν μ μμ΄μ.
κ°μ²΄μ μμ±μ μ κ·Όνλ €λ©΄ μΌλ° ν¨μλ₯Ό μ¬μ©νλ κ²μ΄ μ μ ν΄μ.
3. μ΄λ²€νΈ μ²λ¦¬κΈ°μμ νμ΄ν ν¨μ μ¬μ©νκΈ°
class Button {
constructor() {
this.label = "Click Me!";
}
handleClick = () => {
console.log(this.label);
}
}
const button = new Button();
document.querySelector("#myButton").addEventListener("click", button.handleClick);
μ΄ μμ μμλ νμ΄ν ν¨μλ₯Ό μ¬μ©ν΄ μ΄λ²€νΈ μ²λ¦¬κΈ°λ₯Ό μ μνμ΄μ.
νμ΄ν ν¨μλ thisκ° μμ μ€μ½νμ λ°μΈλ©λλ―λ‘, μ΄λ²€νΈ νΈλ€λ¬μμλ Button ν΄λμ€μ label μμ±μ μ¬λ°λ₯΄κ² μ°Έμ‘°ν μ μμ΄μ.
μΌλ° ν¨μμλ€λ©΄, thisκ° μ΄λ²€νΈ νκ²μΈ λ²νΌ μμλ₯Ό κ°λ¦¬μΌ λ¬Έμ κ° λ°μν μ μμμ κ±°μμ.
4. this
λ°μΈλ©μ΄ νμν κ²½μ° μΌλ° ν¨μ μ¬μ©νκΈ°
const car = {
brand: "Tesla",
getBrand: function() {
return this.brand;
}
};
console.log(car.getBrand()); // Tesla
const getCarBrand = car.getBrand;
console.log(getCarBrand()); // undefined
μΌλ° ν¨μλ νΈμΆλ λ§₯λ½μ λ°λΌ thisκ° λ¬λΌμ Έμ.
car.getBrand λ©μλλ₯Ό νΈμΆν λλ thisκ° car κ°μ²΄λ₯Ό κ°λ¦¬ν€μ§λ§, ν¨μ μ°Έμ‘°λ₯Ό λ€λ₯Έ λ³μμ ν λΉν΄μ νΈμΆνλ©΄ thisκ° μ μ κ°μ²΄λ₯Ό κ°λ¦¬ν€κΈ° λλ¬Έμ undefinedκ° μΆλ ₯λΌμ.
μ΄λ° λ¬Έμ λ₯Ό λ°©μ§νκΈ° μν΄μλ thisλ₯Ό κ³ μ νλ λ°μΈλ©μ΄λ, νμ΄ν ν¨μ λλ bind λ©μλλ₯Ό μ¬μ©ν΄μΌ ν΄μ.
π¨ μ£Όμν μ
- νμ΄ν ν¨μλ μμ±μλ‘ μ¬μ©ν μ μμ΄μ.
new
ν€μλμ ν¨κ» μ¬μ©ν μ μμΌλ©°, μΈμ€ν΄μ€λ₯Ό μμ±νλ μν μ νμ§ μμμ. - νμ΄ν ν¨μλ
this
λ₯Ό λμ μΌλ‘ λ°μΈλ©νμ§ μμμ. λ°λΌμthis
κ° κ³ μ λμ΄μΌ νλ μν©μμλ νμ΄ν ν¨μλ₯Ό μ¬μ©ν΄μΌ νμ§λ§,this
κ° λμ μΌλ‘ λ³ν΄μΌ νλ μν©μμλ μΌλ° ν¨μλ₯Ό μ¬μ©ν΄μΌ ν΄μ.
π κ²°λ‘
νμ΄ν ν¨μλ κ°κ²°ν λ¬Έλ²κ³Ό μμ μ€μ½νμ thisλ₯Ό μ¬μ©νλ νΉμ± λλΆμ μ½λ°± ν¨μλ λ°°μ΄ λ©μλμ κ°μ μν©μμ μμ£Ό μ¬μ©λΌμ. λ°λ©΄, μΌλ° ν¨μλ λμ μΈ this λ°μΈλ©μ΄ νμν λλ arguments
κ°μ²΄λ₯Ό λ€λ€μΌ ν λ μ μ©ν΄μ. μν©μ λ°λΌ μ μ νκ² μ ννμ¬ μ¬μ©νλ κ²μ΄ μ€μν΄μ.
π μΆκ° μ 보
- μλ°μ€ν¬λ¦½νΈμ νμ΄ν ν¨μμ λν λ κΉμ μ΄ν΄λ₯Ό μνμ λ€λ©΄, MDN Web Docsμμ μμΈν μ 보λ₯Ό μ°Ύμλ³Ό μ μμ΄μ.
'Language > JavaScript' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[JavaScript] μ΄λ²€νΈ 루ν(Event Loop) (1) | 2024.10.27 |
---|---|
[JavaScript] λ°°μ΄ λ©μλ(map, filter, reduce) (3) | 2024.10.13 |
[JavaScript] ꡬ쑰 λΆν΄ ν λΉ(Destructuring) (0) | 2024.04.21 |
[JavaScript] ν΄λ‘μ (0) | 2024.03.23 |
[JavaScript] this (1) | 2024.03.18 |
ν¬μ€ν μ΄ μ’μλ€λ©΄ "μ’μμβ€οΈ" λλ "ꡬλ ππ»" ν΄μ£ΌμΈμ!