π ν¨μ
1. jsμμ ν¨μλ
μλ°μ€ν¬λ¦½νΈμμ ν¨μλ μΌκΈ κ°μ²΄(first-class citizen)λ‘ μ·¨κΈλλ©°, μ΄λ ν¨μλ₯Ό λ³μμ ν λΉνκ±°λ, μΈμλ‘ μ λ¬νκ±°λ, λ°νκ°μΌλ‘ μ¬μ©ν μ μμμ μλ―Ένλ€.
μλ°μ€ν¬λ¦½νΈμ ν¨μλ λ€μκ³Ό κ°μ νΉμ§μ κ°μ§λ€:
- μ¬μ¬μ© κ°λ₯ν μ½λ λΈλ‘μ΄λ€.
- ν΄λ‘μ (Closure)λ₯Ό νμ±νμ¬ μΈλΆ μ€μ½νμ μ κ·Όν μ μλ€.
- ν¨μ ννμκ³Ό ν¨μ μ μΈμμ ν΅ν΄ μ μν μ μλ€.
- μ΅λͺ ν¨μ, νμ΄ν ν¨μ, μ¦μ μ€ν ν¨μ(IIFE) λ± λ€μν ννλ₯Ό κ°μ§ μ μλ€.
function sayHello() {
console.log("Hello, World!");
}
const greet = function() {
console.log("Hi!");
};
const arrowGreet = () => console.log("Hey!");
2. κΈ°λ³Έμ μΈ λ¬Έλ²
μλ°μ€ν¬λ¦½νΈμμ ν¨μλ₯Ό μ μνλ λ°©λ²μλ μ¬λ¬ κ°μ§κ° μλ€.
2-1 ν¨μ μ μΈμ(Function Declaration)
function add(a, b) {
return a + b;
}
function
ν€μλλ₯Ό μ¬μ©νμ¬ ν¨μλ₯Ό μ μΈνλ€.- νΈμ΄μ€ν (hoisting)μ΄ μ μ©λμ΄, ν¨μ μ μΈ μ΄μ μλ νΈμΆ κ°λ₯νλ€.
2-2 ν¨μ ννμ(Function Expression)
const subtract = function(a, b) {
return a - b;
};
- λ³μμ ν¨μλ₯Ό ν λΉνλ λ°©μμΌλ‘,
=
μ€λ₯Έμͺ½μ μ΅λͺ ν¨μκ° λ€μ΄κ°λ€. - νΈμ΄μ€ν λμ§ μκΈ° λλ¬Έμ μ μΈ μ΄μ μ νΈμΆν μ μλ€.
2-3 νμ΄ν ν¨μ(Arrow Function)
const multiply = (a, b) => a * b;
=>
λ¬Έλ²μ μ¬μ©νμ¬ κ°κ²°νκ² ννν μ μλ€.this
κ° λ°μΈλ©λμ§ μμΌλ©°, μΌλ° ν¨μμ λμ λ°©μμ΄ λ€λ₯Ό μ μλ€.
2-4 μ¦μ μ€ν ν¨μ(IIFE: Immediately Invoked Function Expression)
(function() {
console.log("μ¦μ μ€νλ¨");
})();
- μ μλμλ§μ μ¦μ μ€νλλ ν¨μμ΄λ€.
- μ μ λ³μ μ€μΌμ λ°©μ§ν μ μλ€.
3. κ°μ²΄ μμ± ν¨μ
μλ°μ€ν¬λ¦½νΈμμλ ν¨μλ₯Ό μ΄μ©νμ¬ κ°μ²΄λ₯Ό μμ±ν μ μλ€. λνμ μΈ λ°©μμ μμ±μ ν¨μ(Constructor Function)λ₯Ό μ΄μ©νλ κ²μ΄λ€.
function Person(name, age) {
this.name = name;
this.age = age;
}
const john = new Person("John", 30);
console.log(john.name); // "John"
console.log(john.age); // 30
μμ±μ ν¨μμ νΉμ§
new
ν€μλλ₯Ό μ¬μ©νμ¬ μλ‘μ΄ κ°μ²΄λ₯Ό μμ±νλ€.- μμ±λ κ°μ²΄λ
this
λ₯Ό ν΅ν΄ νλ‘νΌν°λ₯Ό κ°μ§λ€. prototype
μ νμ©νμ¬ λ©μλλ₯Ό μΆκ°ν μ μλ€.
Person.prototype.greet = function() {
console.log(`Hello, my name is ${this.name}`);
};
john.greet(); // "Hello, my name is John"
4. κ°μ²΄λ‘μ ν¨μ
μλ°μ€ν¬λ¦½νΈμ ν¨μλ κ°μ²΄μ΄λ―λ‘ νλ‘νΌν°λ₯Ό κ°μ§ μ μλ€.
function example() {}
example.customProp = "This is a function property";
console.log(example.customProp); // "This is a function property"
λν, ν¨μ κ°μ²΄λ call
, apply
, bind
λ©μλλ₯Ό μ 곡νμ¬ μ€ν 컨ν
μ€νΈλ₯Ό μ‘°μν μ μλ€.
call
κ³Ό apply
μ μ°¨μ΄
function greet(message) {
console.log(`${message}, ${this.name}`);
}
const user = { name: "Alice" };
greet.call(user, "Hello"); // "Hello, Alice"
greet.apply(user, ["Hi"]); // "Hi, Alice"
call
: ν¨μμthis
λ₯Ό μ§μ νκ³ , μΈμλ₯Ό κ°λ³μ μΌλ‘ μ λ¬νλ€.apply
: ν¨μμthis
λ₯Ό μ§μ νκ³ , μΈμλ₯Ό λ°°μ΄λ‘ μ λ¬νλ€.
bind
λ₯Ό μ¬μ©ν ν¨μ λ°μΈλ©
const boundGreet = greet.bind(user);
boundGreet("Hey"); // "Hey, Alice"
bind
λ μλ‘μ΄ ν¨μλ₯Ό λ°ννλ©°,this
κ° κ³ μ λλ€.
κ΄λ ¨ κ°λ
- ν΄λ‘μ (Closure): ν΄λ‘μ λ ν¨μκ° μ μΈλ λμ μ€μ½νλ₯Ό κΈ°μ΅νλ νΉμ±μ μλ―Ένλ€.
function outerFunction(outerValue) {
return function innerFunction(innerValue) {
console.log(`Outer: ${outerValue}, Inner: ${innerValue}`);
};
}
const closureFunc = outerFunction("outside");
closureFunc("inside"); // "Outer: outside, Inner: inside"
innerFunction
μouterValue
λ₯Ό μ°Έμ‘°ν μ μλ€.- ν΄λ‘μ λ₯Ό νμ©νλ©΄ λ°μ΄ν° μλμ΄λ μν μ μ§κ° κ°λ₯νλ€.
- νΈμ΄μ€ν : λ³μμ ν¨μ μ μΈμ΄ μ½λ μ€ν μ μ μ΅μλ¨μΌλ‘ λμ΄μ¬λ €μ§λ JavaScriptμ λμ λ°©μ
- μ€ν 컨ν μ€νΈ: μ½λκ° μ€νλ λ μμ±λλ νκ²½μΌλ‘, λ³μ, ν¨μ, this λ±μ΄ μ μ₯λκ³ κ΄λ¦¬λ¨
- μΌκΈ κ°μ²΄: λ³μμ ν λΉνκ±°λ μΈμλ‘ μ λ¬ν μ μμΌλ©°, λ°νκ°μΌλ‘λ μ¬μ© κ°λ₯ν κ°μ²΄
- 2κΈκ°μ²΄λ 3κΈκ°μ²΄λ μλ€. (νμλ μμ μ μλ μ€ μμλ€)
- μ€μ½ν: λ³μκ° μ κ·Όν μ μλ λ²μλ₯Ό μ μνλ κ°λ μΌλ‘, μ μ μ€μ½ν, ν¨μ μ€μ½ν, λΈλ‘ μ€μ½νκ° μμ
π μ°Έκ³ μλ£
'Language > javascript' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
Javascriptμ κ°μ²΄μ§ν₯ - μμ (inheritance) (0) | 2025.05.13 |
---|---|
javascriptμ prototypeκ³Ό __proto__ μ 리 (1) | 2025.04.27 |
μλ°μ€ν¬λ¦½νΈμμ "κ°μ²΄" μλ£ν (0) | 2025.03.19 |
javascriptμ μλ£ν Number, Bigint, Stringκ³Ό λ©λͺ¨λ¦¬ (0) | 2025.03.15 |