Baseline Widely available
ã¢ãã¼é¢æ°å¼ã¯ã徿¥ã®é¢æ°å¼ã®ç°¡æ½ãªä»£æ¿æ§æã§ãããæå³çãªéããæå³çãªä½¿ç¨ä¸ã®å¶éãããã¾ãã
this
ãarguments
ã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]
æ§æ
() => å¼
弿° => å¼
(弿°) => å¼
(弿°1, 弿°N) => å¼
() => {
æ
}
弿° => {
æ
}
(弿°1, 弿°N) => {
æ
}
弿°å ã§ã®æ®ä½å¼æ°ãããã©ã«ã弿°ãæ§é åè§£ã«ã¯å¯¾å¿ãã¦ãã¾ãããå¸¸ã«æ¬å¼§ãå¿ è¦ã«ãªãã¾ãã
(a, b, ...r) => å¼
(a = 400, b = 20, c) => å¼
([a, b] = [10, 20]) => å¼
({ a, b } = { a: 10, b: 20 }) => å¼
ã¢ãã¼é¢æ°ã¯ã async
ã«ãããã¨ãã§ãã¾ãããã®å ´åã¯å¼ã®åã« async
ãã¼ã¯ã¼ããä»ãã¾ãã
async 弿° => å¼
async (弿°1, 弿°2, ...弿°N) => {
æ
}
解説
ä¼çµ±çãªç¡å颿°ããæãåç´ãªã¢ãã¼é¢æ°ã«æ®µéçã«åè§£ãã¦ã¿ã¾ããããããããã®æ®µéãæå¹ãªã¢ãã¼é¢æ°ã§ãã
ã¡ã¢: 徿¥ã®é¢æ°å¼ã¨ã¢ãã¼é¢æ°ã¯ãæ§æä»¥å¤ã«ãç°ãªãç¹ãããã¾ããæ¬¡ã®ããã¤ãã®ç¯ã§ããã®åä½ã®éãã詳ããç´¹ä»ãã¾ãã
// 徿¥ã®ç¡å颿°
(function (a) {
return a + 100;
});
// 1. "function" ã¨ããèªãåé¤ãã弿°ã¨æ¬ä½ã®éå§ä¸æ¬å¼§ã®éã«ç¢å°ãé
ç½®ãã
(a) => {
return a + 100;
};
// 2. æ¬ä½ã®ä¸æ¬å¼§ãåé¤ã¨ "return" ã¨ããèªãåé¤ â 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;
颿°ã®æ¬ä½
ã¢ãã¼é¢æ°ã¯ã弿¬ä½ (expression body) ãããããã¯ããä¸è¬çãªãããã¯æ¬ä½ (block body) ã®ã©ã¡ããã使ç¨ãããã¨ãã§ãã¾ãã
弿¬ä½ã«ããã¦ã¯ãåä¸ã®å¼ããè¨è¿°ã§ããªãã®ã§ããã®å¼ãæé»çã« return ãããå¤ã¨ãªãã¾ãããããããããã¯æ¬ä½ã«ããã¦ã¯ãæç¤ºçã« return
æã使ç¨ããå¿
è¦ãããã¾ãã
const func = (x) => x * x;
// 弿¬ä½ã®å ´åãæé»ã® "return" ãããã¾ã
const func2 = (x, y) => {
return x + y;
};
// ãããã¯æ¬ä½ã§ã¯ãæç¤ºç㪠"return" ãå¿
è¦ã§ã
弿¬ä½ (params) => { object: literal }
ã使ã£ã¦ãªãã¸ã§ã¯ããªãã©ã«ãè¿ããã¨ãã¦ããæå¾
éãã«åä½ããªããã¨ã«æ³¨æãã¾ãããã
const func = () => { foo: 1 };
// å¼ã³åºãã func() 㯠undefined ãè¿ãï¼
const func2 = () => { foo: function () {} };
// SyntaxError: function statement requires a name
const func3 = () => { foo() {} };
// SyntaxError: Unexpected token '{'
ããã¯ã JavaScript ãã¢ãã¼é¢æ°ã弿¬ä½ã¨ã¿ãªãã®ã¯ãã¢ãã¼ã«ç¶ããã¼ã¯ã³ã左䏿¬å¼§ã§ãªãå ´åã®ã¿ã§ããããã䏿¬å¼§ ({}) å
ã®ã³ã¼ãã¯ä¸é£ã®æã¨ãã¦è§£éããã foo
ã¯ãªãã¸ã§ã¯ããªãã©ã«ã®ãã¼ã§ã¯ãªããã©ãã«ã¨ãªãã¾ãã
ãããä¿®æ£ããã«ã¯ããªãã¸ã§ã¯ããªãã©ã«ãæ¬å¼§ã§å²ãã§ãã ããã
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(); // undefined, Window { /* ⦠*/ } (ã¾ãã¯ã°ãã¼ãã«ãªãã¸ã§ã¯ã) ã¨è¡¨ç¤º
obj.c(); // 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 { /* ⦠*/ } (ã¾ãã¯ã°ãã¼ãã«ãªãã¸ã§ã¯ã)
return this.a + 10; // ã°ãã¼ãã«ãªãã¸ã§ã¯ã 'Window' ã表ãã®ã§ã 'this.a' 㯠'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
ã®å¤ãå®ç¾©ãã¦ããã颿°ã®å¼ã³åºãæ¹ã«ãã£ã¦ãã®å¤ãå¤ãããã¨ã¯ãªãããã§ãã
ã¢ãã¼é¢æ°ã¯èªèº«ã® arguments
ãªãã¸ã§ã¯ããæã¡ã¾ããããã®ããããã®ä¾ã§ã¯ã arguments
ã¯å²ã£ã¦ããã¹ã³ã¼ãã§ã®åå夿°ã¸ã®åç
§ã«ããã¾ããã
function foo(n) {
const f = () => arguments[0] + n; // foo 㯠arguments ããã¤ã³ããã¦ããã arguments[0] 㯠n ã§ãã
return f();
}
foo(3); // 3 + 3 = 6
ã¡ã¢: 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 || (() => {});
ä¾ åºæ¬çãªä¾
// 空ã®ã¢ãã¼é¢æ°ã¯ undefined ãè¿ãã¾ã
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ãapplyãbind ã®ä½¿ç¨
call
ãapply
ãbind
ã¯ã徿¥ã®é¢æ°ã§ã¯ããããã®ã¡ã½ããã«ã¹ã³ã¼ãã確ç«ããã®ã§ãæå¾
éãã«åä½ãã¾ãã
const obj = {
num: 100,
};
// "num" ã window ã«è¨å®ãã使ç¨ããã¦ããªããã¨ã表ãã
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
颿°ã¯åºæ¬çã« window
(ã°ãã¼ãã«) ã¹ã³ã¼ãã§ä½æããã¦ããã®ã§ã this
㯠window ã ã¨ä»®å®ããã¾ãã
const obj = {
num: 100,
};
// "num" ã window ã«è¨å®ããã©ã®ããã«æ±ãããããè¦ãã
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
ããããã¢ãã¼é¢æ°ã使ãæå¤§ã®å©ç¹ã¯ã DOM ã¬ãã«ã®ã¡ã½ããï¼setTimeout()
ã EventTarget.prototype.addEventListener()
ï¼ã§ãé常ã¯ä½ããã®ã¯ãã¼ã¸ã£ãcall()
ãapply()
ãbind()
ã使ç¨ãã¦ã颿°ãé©åãªã¹ã³ã¼ãã§å®è¡ããããã¨ã確èªããå¿
è¦ããããã¨ã§ãã
徿¥ã®é¢æ°å¼ã§ã¯ããã®ãããªã³ã¼ãã¯æå¾ éãã«åä½ãã¾ããã
const obj = {
count: 10,
doSomethingLater() {
setTimeout(function () {
// ãã®é¢æ°ã¯ window ã®ã¹ã³ã¼ãã§å®è¡ããã
this.count++;
console.log(this.count);
}, 300);
},
};
obj.doSomethingLater(); // "NaN" ã¨è¡¨ç¤ºã "count" ããããã£ã window ã®ã¹ã³ã¼ãã«ãªãããã
ã¢ãã¼é¢æ°ã使ãã°ã this
ã¹ã³ã¼ããããç°¡åã«ä¿æãããã¨ãã§ãã¾ãã
const obj = {
count: 10,
doSomethingLater() {
// ã¡ã½ããã®æ§æã§ "this" ã "obj" ã³ã³ããã¹ãã«ãã¤ã³ããã
setTimeout(() => {
// ã¢ãã¼é¢æ°ã¯ç¬èªã®ãã¤ã³ããè¡ããªãã®ã§ã
// setTimeout ï¼é¢æ°å¼ã³åºãã¨ãã¦ï¼ã¯èªèº«ã¸ã®ãã¤ã³ãã使ããã
// å¤é¨ã¡ã½ããã® "obj" ã³ã³ããã¹ãã使ç¨ãããã
this.count++;
console.log(this.count);
}, 300);
},
};
obj.doSomethingLater(); // logs 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