π¦μΌκΈ κ°μ²΄λ?
1. 무λͺ μ 리ν°λ΄λ‘ μμ±ν μ μλ€ = λ°νμμ μμ±μ΄ κ°λ₯νλ€.
2. λ³μλ μλ£κ΅¬μ‘°(κ°μ²΄, λ°°μ΄ λ±)μ μ μ₯ν μ μλ€.
3. ν¨μμ 맀κ°λ³μμ μ λ¬ν μ μλ€.
4. ν¨μμ λ°νκ°μΌλ‘ μ¬μ©ν μ μλ€.
μ¬κΈ°μ 1λ² μ‘°κ±΄μ λ§μ΄ μ΄λ €μ΄λ° λ°νμμ μμ±λλ€λ 건
μ μ μΌλ‘ μ½λμ μμ±λ ν¨μκ° μλλΌ, νλ‘κ·Έλ¨μ΄ μ€νλλ λμ νμν λ μλ‘μ΄ ν¨μλ₯Ό λ§λ€μ΄ λΌ μ μλ€λ κ².
// μ¬μ©μ μ
λ ₯μ λ°μμ κ·Έμ λ§λ μΈμ¬ ν¨μλ₯Ό μμ±νλ κ²½μ°
function createGreeting(name) {
// μ¬κΈ° ν¨μκ° λ°νμμ μμ±λλ λΆλΆ
return function() {
console.log(`μλ
νμΈμ, ${name}λ!`);
};
}
// νλ‘κ·Έλ¨ μ€ν μ€μ μ¬μ©μ μ
λ ₯μ λ°μλ€κ³ κ°μ νμ λ
const userName = "μΆλ°°"; // μ¬μ©μ μ
λ ₯
const greeting = createGreeting(userName); // μ¬κΈ°μ μλ‘μ΄ ν¨μκ° μμ±λ¨
greeting(); // "μλ
νμΈμ, μΆλ°°λ!" μΆλ ₯
Javascriptμ ν¨μλ μμ 4쑰건μ λͺ¨λ λ§μ‘±νλ―λ‘, μΌκΈκ°μ²΄λΌκ³ ν μ μλ€. μ¦, κ°μ²΄λ‘ μ¬μ©ν μ μλ€.
ν¨μ = μΌκΈ κ°μ²΄μ΄λ―λ‘ ν μ μλ κ²
- ν¨μν νλ‘κ·Έλλ° κ°λ₯ (map, filter, reduceλ±)
- ν΄λ‘μ ꡬν κΈ°λ₯(λ°μ΄ν° μΊ‘μνμ μ 보 μλ)
- μ½λ°± ν¨ν΄ ꡬν κ°λ₯(λΉλκΈ° μ²λ¦¬, μ΄λ²€νΈ μ²λ¦¬)
- κ³ μ°¨ ν¨μ ꡬν κ°λ₯(ν¨μλ₯Ό μΈμλ‘ λ°κ±°λ λ°ν)
νμ§λ§, μ°¨μ΄μ λ μ‘΄μ¬νλ€.
- μΌλ° κ°μ²΄: νΈμΆ λΆκ°λ₯
- ν¨μ: νΈμΆ κ°λ₯, ν¨μ κ³ μ μ νλ‘νΌν°λ₯Ό μμ ν¨
μ¬κΈ°μ ν¨μμ νλ‘νΌν°λ?
πν¨μμ νλ‘νΌν°
ν¨μμ νλ‘νΌν°κ° λμ§ μμ보기 μ ,
κ°μ²΄μ λͺ¨λ μμ±μ 보μ¬μ£Όλ ν¨μμΈ console.dirν¨μλ₯Ό μ΄μ©ν΄μ ν¨μ νλλ₯Ό λ―μ΄λ³΄μ
μμ λ κ²°κ³Ό κ°μμ νμΈν μ μλ arguments, caller, length, name, prototypeμ ν¨μ κ°μ²΄μ λ°μ΄ν° νλ‘νΌν°μ΄λ€.
μ΄ νλ‘νΌν°λ€μ μΌλ° κ°μ²΄μμλ μλ ν¨μ κ°μ²΄ κ³ μ μ νλ‘νΌν°μ΄λ€.
κ°κ°μ νλ‘νΌν°κ° 무μμ μλ―Ένλμ§ νλνλ λ―μ΄λ³΄μ
arguments νλ‘νΌν°
ν¨μ νΈμΆ μ μ λ¬λ μΈμλ€μ μ 보λ₯Ό λ΄κ³ μλ iterableν μ μ¬ λ°°μ΄ κ°μ²΄μ΄λ€.
κ·Έλ¦¬κ³ , ν¨μ λ΄λΆμμ μ¬μ©λλ―λ‘ μΈλΆμμλ μ°Έμ‘°ν μ μλ€.
μ§μ argumentsλ₯Ό μ°μ΄λ³΄λ©΄ μ λ¬λ μΈμλ₯Ό νμΈν μ μλ€.
λ§μ½ μΈμκ° μ¬λ¬κ°μΈλ°, μ ν΄μ§ μΈμλ³΄λ€ μ κ² μ λ¬λλ©΄ undefinedλ‘ μ μ§νκ³ ,
λ λ§λ€λ©΄ μ΄κ³Όλ κ²μ κ²°κ³Όμμλ 무μνμ§λ§ argumentsμ νλ‘νΌν°λ‘ 보κ΄λκΈ΄ νλ€.
argumentsλ iterableν μ μ¬ λ°°μ΄ κ°μ²΄μ΄λ―λ‘, μ΄λ₯Ό μ΄μ©ν΄ κ°λ³ μΈμ ν¨μλ₯Ό ꡬνν λ μ μ©νλ€.
function sum() {
let res = 0
// iterableνλ―λ‘ forλ¬Έ μ¬μ©κ°λ₯
for (let i = 0; i < arguments.length; i++) {
res += arguments[i]
}
return res
}
// μΈμμ κ°―μλ₯Ό μ ν΄μ£Όμ§ μκ³ μνλ λλ‘ λ£μ΄λ μνλ κ²°κ³Ό μΆλ ₯ κ°λ₯
console.log(sum()) // 0
console.log(sum(1, 2)) // 3
console.log(sum(1, 2, 3)) // 6
νμ§λ§ μ μ¬ λ°°μ΄ κ°μ²΄μΌ λΏ, μ§μ§ λ°°μ΄μ μλλ―λ‘ λ°°μ΄ λ©μλλ μ¬μ©ν μ μλ€.
κ·Έλμ κ΅³μ΄ λ°°μ΄λ‘ λ°κΏμ μ¬μ©νλ €λ©΄
(1) κ°μ²΄λ₯Ό λ°°μ΄λ‘ λ³ννλ λ°©λ²
(2) ES6μ λμ
λ Rest νλΌλ―Έν° μ¬μ©(26μ₯μμ λ°°μΈ μμ μ΄λμ)
// 1λ² λ°©λ²
const arr = Array.prototype.slice.call(arguments)
// 2λ² λ°©λ²
function sum(...arg) {
return arg.reduce((pre, cur) => pre + cur, 0)
}
caller νλ‘νΌν°
= ν¨μ μμ μ νΈμΆν ν¨μ
ECMAScript μ¬μμ ν¬ν¨λμ§ μμ λΉνμ€ νλ‘νΌν°μ΄λ―λ‘ μ°Έκ³ λ‘λ§ μμλμ
length νλ‘νΌν°
= ν¨μλ₯Ό μ μν λ μ μΈν 맀κ°λ³μμ κ°μ
function temp1() {
return temp1.length
}
console.log(temp1()) // 0
function temp2(arg1, arg2, arg3) {
return temp2.length
}
console.log(temp2()) // 3
μ΄ λ, argumentsμ length νλ‘νΌν°μλ λ€λ₯΄λ€.
function temp(arg) {
// temp.lengthλ argμ κ°―μ = 1
console.log(temp.length) // 1
// arguments.lengthλ λ€μ΄μ¨ μΈμμ κ°μ = 4
console.log(arguments.length) // 4
}
temp(1, 2, 3, 4)
name νλ‘νΌν°
= ν¨μ μ΄λ¦
ES6 μ΄μ μλ λΉνμ€μ΄μμ§λ§, ES6μμ μ μ νμ€μ΄ λμμ
κ·Έλμ ES5 μ΄μ μμλ μ΅λͺ ν¨μμμλ λΉ λ¬Έμμ΄μ κ°μ§ / ES6λ ν¨μ κ°μ²΄λ₯Ό κ°λ¦¬ν€λ μλ³μλ₯Ό κ°μΌλ‘ κ°μ§
// μ΄λ¦μ΄ μλ ν¨μμμλ μ΄λ¦μ΄ κ·Έλλ‘ μΆλ ₯
let κΈ°λͺ
ν¨μ = function temp() {}
console.log(κΈ°λͺ
ν¨μ.name) // temp
// μ΅λͺ
ν¨μμμλ ν΄λΉ ν¨μλ₯Ό κ°λ₯΄ν€λ λ³μμ΄λ¦μ μΆλ ₯(ES6)
let μ΅λͺ
ν¨μ = function() {}
console.log(μ΅λͺ
ν¨μ.name) // μ΅λͺ
ν¨μ
// ν¨μ μ μΈλ¬Έ
function μ μΈλν¨μ() {}
console.log(μ μΈλν¨μ.name) // μ μΈλν¨μ
__proto__ μ κ·Όμ νλ‘νΌν°
λͺ¨λ κ°μ²΄λ [[Prototype]]μ΄λΌλ λ΄λΆ μ¬λ‘―μ κ°μ§
( = κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°μ μμμ ꡬννλ νλ‘ν νμ κ°μ²΄, 19μ₯μμ μμ보μ)
__proto__λ [[Prototype]] λ΄λΆ μ¬λ‘―μ΄ κ°λ¦¬ν€λ νλ‘ν νμ κ°μ²΄μ μ κ·ΌνκΈ° μν΄ μ¬μ©λλ μ κ·Όμ νλ‘νΌν°μ
prototype νλ‘νΌν°
μμ±μ ν¨μλ‘ νΈμΆν μ μλ ν¨μ κ°μ²΄(= constructor)λ§μ΄ μμ νλ νλ‘νΌν°
μΌλ° κ°μ²΄μ μμ±μ ν¨μλ‘ νΈμΆν μ μλ non-constructorμλ prototype νλ‘νΌν°κ° μμ
// ν¨μ κ°μ²΄λ prototype νλ‘νΌν°λ₯Ό μμ
(function () {}).hasOwnProperty('prototype') // true
// μΌλ° κ°μ²΄λ μμ
({}).hasOwnProperty('prototype') // false
__proto__μ prototypeμ΄ μ΄ν΄κ° μλμ ν΄λ‘λκ° μλ €μ€ μμ..(μ°Έκ³ μ©)
function Dog(name) {
this.name = name;
}
// 1. prototype νλ‘νΌν° μ¬μ©
Dog.prototype.bark = function() {
console.log('λ©λ©!');
};
const dog1 = new Dog('λ½μ');
const dog2 = new Dog('μ½μ½');
// 2. __proto__λ₯Ό ν΅ν λ©μλ μ κ·Ό
dog1.bark(); // "λ©λ©!" μΆλ ₯
dog2.bark(); // "λ©λ©!" μΆλ ₯
// 3. νλ‘ν νμ
μ²΄μΈ νμΈ
console.log(dog1.__proto__ === Dog.prototype); // true
console.log(dog1.__proto__.__proto__ === Object.prototype); // true
console.log(dog1.__proto__.__proto__.__proto__); // null
// 4. ν¨μμ νλ‘ν νμ
체μΈ
console.log(Dog.__proto__ === Function.prototype); // true
console.log(Dog.__proto__.__proto__ === Object.prototype); // true
μκ°μ μΌλ‘ 보면
// κ°μ²΄μ νλ‘ν νμ
μ κ΄κ³
Dog (μμ±μ ν¨μ)
βββ prototype: Dog.prototype
β βββ constructor: Dog
β βββ bark: function
β βββ __proto__: Object.prototype
βββ __proto__: Function.prototype
dog1 (μΈμ€ν΄μ€)
βββ name: "λ½μ"
βββ __proto__: Dog.prototype
μ¬κΈ°μ prototypeμ ν¨μλ§ κ°μ§κ³ μμ
'FrontEnd > JavaScript' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Javascript] νλ‘ν νμ (2) νλ‘ν νμ κ°μ²΄ (1) | 2024.11.10 |
---|---|
[Javascript] νλ‘ν νμ (1) κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°κ³Ό μμ (0) | 2024.11.09 |
[Javascript] λ¨μΆνκ° (1) | 2024.10.26 |
[Javascript] νμ λ³ν (0) | 2024.10.24 |
[JS] λ°±μ€μμ fs λͺ¨λλ‘ input λ°κΈ°(feat. VScodeμ λ°±μ€) (0) | 2024.06.18 |