Baseline Widely available
íì´í í¨ì ííì(íì´í í¨ì expression)ì í¨ì ííìì ëí ê°ê²°í ëìì¼ë¡, ì½ê°ì ì미ì ì°¨ì´ì ìëì ì¸ ì¬ì©ìì ì íì ê°ì§ê³ ììµëë¤.
this
ì ìì¼ë©°, ì¸ì
ëë super
ë¡ ì¬ì©í´ì¼ íë©°, ë©ìëë¡ ì¬ì©íë©´ ì ë©ëë¤.new
ë¡ í¸ì¶íë©´ TypeError
ê° ë°íë©ëë¤. new.target
í¤ìëì ëí ì¡ì¸ì¤ ê¶íë ììµëë¤.yield
를 ì¬ì©í ì ìì¼ë©° ì ëë ì´í° í¨ìë¡ ìì±í ì ììµëë¤.const materials = ["Hydrogen", "Helium", "Lithium", "Beryllium"];
console.log(materials.map((material) => material.length));
// Expected output: Array [8, 6, 7, 9]
구문
() => expression
param => expression
(param) => expression
(param1, paramN) => expression
() => {
statements
}
param => {
statements
}
(param1, paramN) => {
statements
}
매ê°ë³ì ë´ ëë¨¸ì§ ë§¤ê°ë³ì, ê¸°ë³¸ê° ë§¤ê°ë³ì, 구조 ë¶í´ í ë¹ì´ ì§ìëë©° íì ê´í¸ ìì ë£ì´ì¼ í©ëë¤.
(a, b, ...r) => expression
(a = 400, b = 20, c) => expression
([a, b] = [10, 20]) => expression
({ a, b } = { a: 10, b: 20 }) => expression
íì´í í¨ìë ííì ìì async
í¤ìë를 ë¶ì¬ì async
ë¡ ì§ì í ì ììµëë¤.
async param => expression
async (param1, param2, ...paramN) => {
statements
}
ì¤ëª
기존ì ìµëª í¨ì를 ê°ì¥ ê°ë¨í íì´í í¨ìë¡ ë¨ê³ë³ë¡ ë¶í´í´ ë³´ê² ìµëë¤. ì´ ê³¼ì ìì ê° ë¨ê³ë ì í¨í íì´í í¨ìì ëë¤.
ì°¸ê³ : 기존 í¨ì ííìê³¼ íì´í í¨ìë 구문 ì¸ìë ë ë§ì ì°¨ì´ì ì´ ììµëë¤. ë¤ì ëª ê°ì íì ì¹ì ìì ë í¨ìì ëì ì°¨ì´ì ëí´ ìì¸í ìê°íê² ìµëë¤.
// 기존ì ìµëª
í¨ì
(function (a) {
return a + 100;
});
// 1. "function"ì´ë¼ë ë¨ì´ë¥¼ ì ê±°íê³ ì¸ìì ì¬ë ëê´í¸ ì¬ì´ì íì´í를 ë°°ì¹í©ëë¤.
(a) => {
return a + 100;
};
// 2. ì¤ê´í¸ì "return"ì´ë¼ë ë¨ì´ë¥¼ ì ê±°íë©´ ë°íì´ ììë©ëë¤.
(a) => a + 100;
// 3. 매ê°ë³ìì ê´í¸ë¥¼ ì ê±°í©ëë¤.
a => a + 100;
ìì ìììë 매ê°ë³ì 주ìì ê´í¸ì í¨ì 본문 주ìì ì¤ê´í¸ë¥¼ 모ë ìëµí ì ììµëë¤. ê·¸ë¬ë í¹ì ê²½ì°ìë§ ìëµí ì ììµëë¤.
ê´í¸ë í¨ìì íëì ê°ë¨í 매ê°ë³ìê° ìë ê²½ì°ìë§ ìëµí ì ììµëë¤. ë§¤ê° ë³ìê° ì¬ë¬ ê° ìê±°ë ìê±°ë 기본ê°ì¸ ê²½ì°ì 구조 ë¶í´ í ë¹ë ë§¤ê° ë³ì ëë ëë¨¸ì§ ë§¤ê° ë³ìê° ìë ê²½ì° ë§¤ê° ë³ì ëª©ë¡ ì£¼ìì ê´í¸ë¥¼ ì¬ì©í´ì¼ í©ëë¤.
// 기존ì ìµëª
í¨ì
(function (a, b) {
return a + b + 100;
});
// íì´í í¨ì
(a, b) => a + b + 100;
const a = 4;
const b = 2;
// 기존ì ìµëª
í¨ì (매ê°ë³ìê° ìì)
(function () {
return a + b + 100;
});
// íì´í í¨ì (매ê°ë³ìê° ìì)
() => a + b + 100;
ì¤ê´í¸ë í¨ìê° ì§ì ííìì ë°ííë ê²½ì°ìë§ ìëµí ì ììµëë¤. 본문ì ì¶ê°ë¡ ì²ë¦¬íë êµ¬ë¬¸ì´ ìë ê²½ì° ì¤ê´í¸ê° íìíë©° return
í¤ìëë ë§ì°¬ê°ì§ì
ëë¤. íì´í í¨ìë 무ìì ì¸ì ë°íí ì§ ì¶ì¸¡í ì ììµëë¤.
// 기존ì ìµëª
í¨ì
(function (a, b) {
const chuck = 42;
return a + b + chuck;
});
// íì´í í¨ì
(a, b) => {
const chuck = 42;
return a + b + chuck;
};
íì´í í¨ìë íì ì´ë¦ì´ ì§ì ëì§ ììµëë¤. íì´í í¨ìê° ì¤ì¤ë¡ë¥¼ í¸ì¶í´ì¼ íë ê²½ì° ëª ëª ë í¨ì ííìì ëì ì¬ì©íì¸ì. íì´í í¨ì를 ë³ìì í ë¹íì¬ ì´ë¦ì ì§ì í ìë ììµëë¤.
// 기존 í¨ì
function bob(a) {
return a + 100;
}
// íì´í í¨ì
const bob2 = (a) => a + 100;
í¨ì ë´ë¶
íì´í í¨ìë ê°ê²°í 본문ì´ë ì¼ë°ì ì¸ ë¸ë¡ ííì 본문ì ê°ì§ ì ììµëë¤.
ê°ê²°í 본문ììë ììì ë°íê°ì´ ëë ë¨ì¼ ííìë§ ì§ì ë©ëë¤. ë¸ë¡ 본문ììë ëª
ìì ì¸ return
문ì ì¬ì©í´ì¼ í©ëë¤.
const func = (x) => x * x;
// ê°ê²°í 본문 구문, ììì "ë°í"
const func2 = (x, y) => {
return x + y;
};
// ë¸ë¡ 본문ì í¬í¨, ëª
ìì "ë°í" íì
ê°ê²°í 본문 구문ì (params) => { object: literal }
ì ì¬ì©íì¬ ê°ì²´ 리í°ë´ì ë°ííë©´ ììëë¡ ìëíì§ ììµëë¤.
const func = () => { foo: 1 };
// func()를 í¸ì¶íë©´ ì ìëì§ ìì ê°ì´ ë°íë©ëë¤.
const func2 = () => { foo: function () {} };
// SyntaxError: function statement requires a name
const func3 = () => { foo() {} };
// SyntaxError: Unexpected token '{'
JavaScriptë íì´í ë¤ì ì¤ë í í°ì´ ì¼ìª½ ì¤ê´í¸ê° ìë ê²½ì°ìë§ íì´í í¨ìì ê°ê²°í ë³¸ë¬¸ì´ ìë ê²ì¼ë¡ ê°ì£¼í©ëë¤. ì¤ê´í¸({}) ìì ì½ëë ì¼ë ¨ì 구문ì¼ë¡ íì±ëë©°, ì¬ê¸°ì foo
ë ê°ì²´ 리í°ë´ì í¤ê° ìë labelì´ ë©ëë¤.
ì´ ë¬¸ì 를 í´ê²°íë ¤ë©´ ê°ì²´ 리í°ë´ì ê´í¸ë¡ 묶ì¼ë©´ ë©ëë¤.
const func = () => ({ foo: 1 });
ë©ìëë¡ ì¬ì©í ì ììµëë¤
íì´í í¨ì ííìì this
ê° ì기 ë문ì ë©ìëê° ìë í¨ììë§ ì¬ì©í´ì¼ í©ëë¤. ë©ìëë¡ ì¬ì©íë ¤ê³ íë©´ ì´ë¤ ì¼ì´ ì¼ì´ëëì§ ì´í´ë´
ìë¤.
"use strict";
const obj = {
i: 10,
b: () => console.log(this.i, this),
c() {
console.log(this.i, this);
},
};
obj.b(); // logs undefined, Window { /* ⦠*/ } (or the global object)
obj.c(); // logs 10, Object { /* ⦠*/ }
ë ë¤ë¥¸ ìë Object.defineProperty()
ì ê´ë ¨ë ê²ì
ëë¤.
"use strict";
const obj = {
a: 10,
};
Object.defineProperty(obj, "b", {
get: () => {
console.log(this.a, typeof this.a, this); // undefined 'undefined' Window { /* ⦠*/ } (or the global object)
return this.a + 10; // represents global object 'Window', therefore 'this.a' returns 'undefined'
},
});
í´ëì¤ì ë´ë¶ìë this
ê° ìì¼ë¯ë¡, íì´í í¨ìë í´ëì¤ íëê° í´ëì¤ì this
컨í
ì¤í¸ ìì ë«í ë ìëí©ëë¤. ê·¸ë¬ë©´ íì´í í¨ì ë´ë¶ì this
ê° ì¸ì¤í´ì¤ (ëë ì ì íëì ê²½ì° í´ëì¤ ìì²´)를 ì¬ë°ë¥´ê² ê°ë¦¬í¤ê² ë©ëë¤. ê·¸ë¬ë í¨ì ìì²´ì ë°ì¸ë©ì´ ìë í´ë¡ì ì´ë¯ë¡ ì¤í 컨í
ì¤í¸ì ë°ë¼ this
ì ê°ì´ ë³ê²½ëì§ ììµëë¤.
class C {
a = 1;
autoBoundMethod = () => {
console.log(this.a);
};
}
const c = new C();
c.autoBoundMethod(); // 1
const { autoBoundMethod } = c;
autoBoundMethod(); // 1
// ì ìì ì¸ ë©ìëë¼ë©´ ì´ ê²½ì°ìë ì ìëì§ ììì¼ í©ëë¤.
íì´í í¨ì ìì±ì ì¼ë° ë©ìëì ëì¼í기 ë문ì íí "ìë ë°ì¸ë© ë©ìë"ë¼ê³ ë¶ë¦½ëë¤.
class C {
a = 1;
constructor() {
this.method = this.method.bind(this);
}
method() {
console.log(this.a);
}
}
ì°¸ê³ : í´ëì¤ íëë íë¡í íì ì´ ìë ì¸ì¤í´ì¤ì ì ìëë¯ë¡ ì¸ì¤í´ì¤ë¥¼ ìì±í ëë§ë¤ ì í¨ì ì°¸ì¡°ê° ìì±ëê³ ì í´ë¡ì ê° í ë¹ëì´ ì¼ë°ì ì¸ ì¸ë°ì´ë ë©ìëë³´ë¤ ë©ëª¨ë¦¬ ì¬ì©ëì´ ëì´ë ì ììµëë¤.
ë¹ì·í ì´ì ë¡ call()
, apply()
, bind()
ë©ìëë íì´í í¨ììì í¸ì¶í ë ì ì©íì§ ììµëë¤. íì´í í¨ìë íì´í í¨ìê° ì ìë ë²ì를 기ë°ì¼ë¡ this
ì ì¤ì íê³ í¨ìê° í¸ì¶ëë ë°©ìì ë°ë¼ this
ê°ì´ ë³íì§ ì기 ë문ì
ëë¤.
íì´í í¨ììë ìì²´ arguments
ê°ì²´ê° ììµëë¤. ë°ë¼ì ì´ ìì ìì arguments
ë ëë¬ì¸ë ë²ìì ì¸ì를 참조í©ëë¤.
function foo(n) {
const f = () => arguments[0] + n; // fooì ììì ì¸ì ë°ì¸ë©ì
ëë¤. arguments[0]ì nì
ëë¤.
return f();
}
foo(3); // 3 + 3 = 6
ì°¸ê³ : strict modeììë
arguments
ë ë³ì를 ì ì¸í ì ìì¼ë¯ë¡ ìì ì½ëë 구문 ì¤ë¥ê° ë©ëë¤. ì´ë ê² íë©´arguments
ì ë²ì ì§ì í¨ê³¼ë¥¼ í¨ì¬ ë ì½ê² ì´í´í ì ììµëë¤.
ëë¶ë¶ì ê²½ì°, ëë¨¸ì§ ë§¤ê°ë³ì를 ì¬ì©íë ê²ì´ arguments
ê°ì²´ë¥¼ ì¬ì©íë ê²ë³´ë¤ ì¢ì ëìì
ëë¤.
function foo(n) {
const f = (...args) => args[0] + n;
return f(10);
}
foo(1); // 11
ìì±ìë¡ ì¬ì©í ì ììµëë¤
íì´í í¨ìë ìì±ìë¡ ì¬ì©í ì ìì¼ë©° new
ì í¨ê» í¸ì¶íë©´ ìë¬ê° ë°ìí©ëë¤. ëí prototype
ìì±ì´ ììµëë¤.
const Foo = () => {};
const foo = new Foo(); // TypeError: Foo is not a constructor
console.log("prototype" in Foo); // false
ì ëë ì´í°ë¡ ì¬ì©í ì ììµëë¤
yield
í¤ìëë íì´í í¨ì 본문ìì ì¬ì©í ì ììµëë¤. (íì´í í¨ì ë´ì ì¤ì²©ë ì ëë ì´í° í¨ì ë´ìì ì¬ì©íë ê²½ì°ë¥¼ ì ì¸íê³ ëì). ë°ë¼ì íì´í í¨ìë ì ëë ì´í°ë¡ ì¬ì©í ì ììµëë¤.
íì´í í¨ììë 매ê°ë³ìì íì´í ì¬ì´ì ì¤ ë°ê¿ì´ í¬í¨ë ì ììµëë¤.
const func = (a, b, c)
=> 1;
// SyntaxError: Unexpected token '=>'
ììì ì§ì íë ¤ë©´ ìëì ê°ì´ íì´í ë¤ì ì¤ ë°ê¿ì ë£ê±°ë í¨ì 본문 주ìì ê´í¸/ì¤ê´í¸ë¥¼ ì¬ì©í ì ììµëë¤. 매ê°ë³ì ì¬ì´ì ì¤ ë°ê¿ì ë£ì ìë ììµëë¤.
const func = (a, b, c) =>
1;
const func2 = (a, b, c) => (
1
);
const func3 = (a, b, c) => {
return 1;
};
const func4 = (
a,
b,
c,
) => 1;
íì´íì ì°ì ìì
íì´í í¨ìì íì´íë ì°ì°ìê° ìëì§ë§, íì´í í¨ììë ì¼ë° í¨ìì ë¹í´ ì°ì°ì ì°ì ììê° ë¤ë¥¸ í¹ìí 구문 ë¶ì ê·ì¹ì´ ììµëë¤.
let callback;
callback = callback || () => {};
// SyntaxError: invalid arrow-function arguments
=>
ë ëë¶ë¶ì ì°ì°ìë³´ë¤ ì°ì ììê° ë®ì¼ë¯ë¡ callback || ()
ì´ íì´í í¨ìì ì¸ì 목ë¡ì¼ë¡ 구문 ë¶ìëì§ ìëë¡ ê´í¸ë¥¼ ì¬ì©í´ì¼ í©ëë¤.
callback = callback || (() => {});
ìì íì´í í¨ì ì¬ì©í기
// ë¹ íì´í í¨ìë ì ìëì§ ìì ê°ì ë°íí©ëë¤.
const empty = () => {};
(() => "foobar")();
// "foobar"를 ë°íí©ëë¤.
// (ì¦ì í¸ì¶ëë í¨ì ííìì
ëë¤.)
const simple = (a) => (a > 15 ? 15 : a);
simple(16); // 15
simple(10); // 10
const max = (a, b) => (a > b ? a : b);
// ê°ë¨í ë°°ì´ íí°ë§, 매í ë±
const arr = [5, 6, 13, 0, 1, 18, 23];
const sum = arr.reduce((a, b) => a + b);
// 66
const even = arr.filter((v) => v % 2 === 0);
// [6, 0, 18]
const double = arr.map((v) => v * 2);
// [10, 12, 26, 0, 2, 36, 46]
// ë³´ë¤ ê°ê²°í íë¡ë¯¸ì¤ ì²´ì¸
promise
.then((a) => {
// â¦
})
.then((b) => {
// â¦
});
// ìê°ì ì¼ë¡ ë ì½ê² 구문 ë¶ìí ì ìë 매ê°ë³ì ìë íì´í í¨ì
setTimeout(() => {
console.log("I happen sooner");
setTimeout(() => {
// deeper code
console.log("I happen later");
}, 1);
}, 1);
call, bind, apply ë©ìë ì¬ì©í기
call()
, apply()
, bind()
ë©ìëë ê° ë©ìëì ë²ì를 ì¤ì íë¯ë¡ 기존 í¨ììì ììëë ëë¡ ìëí©ëë¤.
const obj = {
num: 100,
};
// globalThisì "num"ì ì¤ì íì¬ ì¬ì©íì§ ìë ë°©ë²ì íìí©ëë¤.
globalThis.num = 42;
// "this"ìì ìëíë ê°ë¨í 기존 í¨ì
const add = function (a, b, c) {
return this.num + a + b + c;
};
console.log(add.call(obj, 1, 2, 3)); // 106
console.log(add.apply(obj, [1, 2, 3])); // 106
const boundAdd = add.bind(obj);
console.log(boundAdd(1, 2, 3)); // 106
íì´í í¨ìì ê²½ì°, add
í¨ìë 기본ì ì¼ë¡ globalThis
(ì ì) ë²ììì ìì±ëë¯ë¡ this
ê° globalThis
ë¼ê³ ê°ì í©ëë¤.
const obj = {
num: 100,
};
// globalThisì "num"ì ì¤ì íì¬ ì íëë ë°©ìì íìí©ëë¤.
globalThis.num = 42;
// íì´í í¨ì
const add = (a, b, c) => this.num + a + b + c;
console.log(add.call(obj, 1, 2, 3)); // 48
console.log(add.apply(obj, [1, 2, 3])); // 48
const boundAdd = add.bind(obj);
console.log(boundAdd(1, 2, 3)); // 48
íì´í í¨ì를 ì¬ì©íë©´ ê°ì¥ í° ì´ì ì setTimeout()
, EventTarget.prototype.addEventListener()
ì ê°ì´ í¨ìê° ì ì í ë²ììì ì¤íëëë¡ í기 ìí´ ì¼ë°ì ì¼ë¡ ì¼ì¢
ì í´ë¡ì , call()
, apply()
ëë bind()
ê° íìí ë©ìëì ì¬ì©í ì ìë¤ë ê²ì
ëë¤.
기존 í¨ì ííìì ì¬ì©íë©´ ì´ì ê°ì ì½ëê° ììëë¡ ìëíì§ ììµëë¤.
const obj = {
count: 10,
doSomethingLater() {
setTimeout(function () {
// í¨ìë window ë²ììì ì¤íë©ëë¤.
this.count++;
console.log(this.count);
}, 300);
},
};
obj.doSomethingLater(); // "count" ìì±ì´ window ë²ìì ì기 ë문ì "NaN"ì 기ë¡í©ëë¤.
íì´í í¨ì를 ì¬ì©íë©´ this
ì ë²ì를 ë ì½ê² ë³´ì¡´í ì ììµëë¤.
const obj = {
count: 10,
doSomethingLater() {
// ë©ìë 구문ì "this"를 "obj" 컨í
ì¤í¸ì ë°ì¸ë©í©ëë¤.
setTimeout(() => {
// íì´í í¨ììë ìì²´ ë°ì¸ë©ì´ ìê³
// í¨ì í¸ì¶ë¡ì setTimeoutì ë°ì¸ë© ì체를 ìì±íì§ ìì¼ë¯ë¡
// ì¸ë¶ ë©ìëì "obj" 컨í
ì¤í¸ê° ì¬ì©ë©ëë¤.
this.count++;
console.log(this.count);
}, 300);
},
};
obj.doSomethingLater(); // 11ì 기ë¡í©ëë¤.
ëª
ì¸ì ë¸ë¼ì°ì í¸íì± ì°¸ì¡°
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4