Baseline Widely available
ç®é å½å¼éç®å¼ï¼arrow function expressionï¼æææ¯å½å¼éç®å¼éç°¡ççèªæ³ã宿²æèªå·±ç this
ãargumentsãsuperãnew.target çèªæ³ãæ¬å½å¼éç®å¼é©ç¨æ¼éæ¹æ³çå½å¼ï¼ä½ä¸è½è¢«ç¨ä½å»ºæ§å¼ï¼constructorï¼ã
const materials = ["Hydrogen", "Helium", "Lithium", "Beryllium"];
console.log(materials.map((material) => material.length));
// Expected output: Array [8, 6, 7, 9]
åºæ¬èªæ³
(忏1, 忏2, â¦, 忏N) => { é³è¿°å¼; } (忏1, 忏2, â¦, 忏N) => 表示å¼; // çç¸å(忏1, 忏2, â¦, 忏N) => { return 表示å¼; } // åªæä¸å忏æ,æ¬èæè½ä¸å : (å®ä¸åæ¸) => { é³è¿°å¼; } å®ä¸åæ¸ => { é³è¿°å¼; } //è¥ç¡åæ¸ï¼å°±ä¸å®è¦å æ¬è: () => { statements }é²éèªæ³
// ç¨å¤§æ¬èå°å §å®¹æ¬èµ·ä¾ï¼è¿åä¸åç©ä»¶åé¢å¼è¡¨ç¤ºæ³ï¼ params => ({foo: bar}) // æ¯æ´å ¶é¤åæ¸èé è¨åæ¸ (param1, param2, ...rest) => { statements } (param1 = defaultValue1, param2, â¦, paramN = defaultValueN) => { statements } // 乿¯æ´ parameter list çè§£æ§ var f = ([a, b] = [1, 2], {x: c} = {x: a + b}) => a + b + c; f(); // 6說æ
ä¹å¯åé± "ES6 In Depth: Arrow functions" on hacks.mozilla.orgã
ç®é å½å¼æå
©åéè¦çç¹æ§ï¼æ´ççå½å¼å¯«æ³è this
è®æ¸çéç¶å®ã
var elements = ["Hydrogen", "Helium", "Lithium", "Beryllium"];
// éæ®µå½å¼æè¼¸åº[8, 6, 7, 9]éåé£å
elements.map(function (element) {
return element.length;
});
// 䏿¹é種ä¸è¬çå½å¼ï¼å¯ä»¥è¢«æ¹å¯«æä¸æ¹çç®é å½å¼
elements.map((element) => {
return element.length;
}); // [8, 6, 7, 9]
// å¦æè¼¸å
¥çåæ¸åªæä¸åï¼æåå¯ä»¥ç§»é¤æå¤é¢çæ¬è
elements.map((element) => {
return element.length;
}); // [8, 6, 7, 9]
// ç¶ç®é å½å¼è£¡çå
§å®¹åªæ'return'çæåï¼æåå¯ä»¥æ¿æreturnåå¤é¢ç大æ¬è
elements.map((element) => element.length); // [8, 6, 7, 9]
// å¨éåç¯ä¾ä¸ï¼å çºæååªéè¦lengthéå屬æ§ï¼æä»¥ä¹å¯ä»¥ä½¿ç¨è§£æ§ï¼
// 䏿¹ç'length'å°æå°æåæ³åå¾ç屬æ§ï¼è'lengthFooBArX'åªæ¯å¾æ®éçè®æ¸å稱,
// å¯ä»¥è¢«ä»»æä¿®æ¹æä½ æ³è¦çåå
elements.map(({ length: lengthFooBArX }) => lengthFooBArX); // [8, 6, 7, 9]
// ä¸é¢é種解æ§ä¹å¾ç忏ä¹å¯ä»¥è¢«æ¹å¯«çºä¸é¢é樣ãä½è¦æ³¨æçæ¯ï¼å¨éåç¯ä¾ä¸ï¼
// æå䏿¯è¦æå®'length'éåå¼çµ¦ä¸åèæ§ç屬æ§ï¼èæ¯éåè®æ¸çå稱'length'æ¬èº«å°±æ¯
// ç¨ä¾ç¶ææåæ³å¾ç©ä»¶ä¸åå¾ç屬æ§
elements.map(({ length }) => length); // [8, 6, 7, 9]
this
ä¸åå®¶
卿ç®é 彿¸ä¹åï¼æ¯åæ°å½å¼æ¯ä¾æå¦ä½è¢«å¼å«ä¾å®ç¾©èªå·±ç this
è®æ¸ ä¾å¦:
äºå¯¦èæéå°ç©ä»¶å°åç¨å¼è¨è¨ä¾èªªä¸¦ä¸çæ³ã
function Person() {
// Person() 建æ§å¼å° this å®ç¾©çºå®èªå·±çä¸å實é«
this.age = 0;
setInterval(function growUp() {
// å¨éå´æ ¼æ¨¡å¼ä¸, growUp() å½å¼æ this å®ç¾©çºå
¨åç©ä»¶
// (å çºé£æ¯ growUp()å·è¡çæå¨)ï¼
// è Person() 建æ§å¼æå®ç¾©ç this ææä¸å
this.age++;
}, 1000);
}
var p = new Person();
å¨ ECMAScript 3/5 裡é¢ï¼æé this
çåé¡ï¼å¯ä»¥ééææ´¾ this
å¼çµ¦å¯ä»¥ééçè®æ¸è§£æ±ºã
function Person() {
var self = this; // æäºäººåæ¡ `that` è䏿¯ `self`.
// é¸å¥½ä¸ç¨®åæ³å¾å§çµå¦ä¸
self.age = 0;
setInterval(function growUp() {
// éå callback åè `self` è®æ¸ï¼çºé æä¸çç©ä»¶ã
self.age++;
}, 1000);
}
æè
éé bind å½å¼ä¾ç¶å® this
è®æ¸å°æå®å½å¼ï¼ä»¥ä¸é¢çºä¾ï¼å°±æ¯ growUp()
å½å¼ï¼ã
ç®é å½å¼ä¸¦ä¸ææèªå·±ç this è®
æ¸ï¼
使ç¨ç this å¼ä¾èª
å°éçææ¬ä¸ä¸æï¼ä¹å°±æ¯èªªï¼ç®é å½å¼éµå¾ªå¸¸è¦è®éæ¥æ¾è¦åãå æ¤ï¼å¦æå¨ç¶åç¯åä¸æç´¢ä¸å° this è®éæï¼ä»åæçµæå°æ¾å
¶å°éç¯åã
å æ¤ï¼å¨ä»¥ä¸ç¨å¼ç¢¼å
§ï¼å³é給 setInterval
ç ç®é å½å¼ä¸çthis
ï¼æèå°éå½å¼ç this
å¼ç¸åï¼
function Person() {
this.age = 0;
setInterval(() => {
this.age++; // |this| é©åçåèäºPerson建æ§å¼æå»ºç«çç©ä»¶
}, 1000);
}
var p = new Person();
åå´æ ¼æ¨¡å¼çéä¿
ç±æ¼ this
è®æ¸å
·æè©å½ä¸ç¶å®æç¾©ï¼æä»¥å´æ ¼æ¨¡å¼ç宣åå° this
çä½ç¨å°è¢«å¿½ç¥ã
var f = () => {
"use strict";
return this;
};
f() === window; // ææ¯ global ç©ä»¶
ä½å´æ ¼æ¨¡å¼çå ¶ä»ä½ç¨ä¾èåå¨ã
ç± call è apply å½å¼å¼å«ç±æ¼ç®é å½å¼ä¸¦æ²æèªå·±ç this
ï¼æä»¥éé call()
æ apply()
å¼å«ç®é å½å¼åªè½å³å
¥åæ¸ãthisArg
å°æè¢«å¿½ç¥ã
var adder = {
base: 1,
add: function (a) {
var f = (v) => v + this.base;
return f(a);
},
addThruCall: function (a) {
var f = (v) => v + this.base;
var b = {
base: 2,
};
return f.call(b, a);
},
};
console.log(adder.add(1)); // 顯示 2
console.log(adder.addThruCall(1)); // ä¾è顯示 2
ä¸ç¶å® arguments
ç®é å½å¼ä¸¦æ²æèªå·±ç arguments
ç©ä»¶ãæä»¥å¨æ¤ä¾ä¸ï¼arguments
åªæ¯åèå° enclosing ä½ç¨å裡é¢çç¸åè®æ¸ï¼
var arguments = [1, 2, 3];
var arr = () => arguments[0];
arr(); // 1
function foo(n) {
var f = () => arguments[0] + n; // foo's implicit arguments binding. arguments[0] is n
return f();
}
foo(1); // 2
大夿åï¼ä½¿ç¨å
¶é¤åæ¸ æ¯å代 arguments
ç©ä»¶çè¼å¥½æ¹å¼ã
function foo(n) {
var f = (...args) => args[0] + n;
return f(10);
}
foo(1); // 11
å°ç®é å½å¼æ°å¯«çºæ¹æ³
å¦ååè¿°ï¼ç®é å½å¼éç®å¼æé©åç¨å¨éæ¹æ³çå½å¼ãä¾ççå¦æè¦æå®åç¶ææ¹æ³ä¾ç¨ï¼æç¼çä»éº¼äºï¼
"use strict";
var obj = {
i: 10,
b: () => console.log(this.i, this),
c: function () {
console.log(this.i, this);
},
};
obj.b(); // å°åº undefined, Window {...} (or the global object)
obj.c(); // å°åº 10, Object {...}
ç®é å½å¼ä¸¦æ²æèªå·±ç this
ãå¦ä¸åä¾åè Object.defineProperty()
æéï¼
"use strict";
var 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'
},
});
ä½¿ç¨ new
éç®å
ç®é å½å¼ä¸å¯ä½çºå»ºæ§å¼ä½¿ç¨ï¼è¥ä½¿ç¨æ¼å»ºæ§å¼ï¼æå¨ä½¿ç¨ new
æåæåºé¯èª¤ã
var Foo = () => {};
var foo = new Foo(); // TypeError: Foo is not a constructor
ä½¿ç¨ prototype
屬æ§
ç®é å½å¼ä¸¦æ²æååï¼prototype
ï¼å±¬æ§ã
var Foo = () => {};
console.log(Foo.prototype); // undefined
使ç¨ééµå yield
yield
ééµåç¡æ³ç¨æ¼ç®é å½å¼ç bodyï¼except when permitted within functions further nested within itï¼ãå æ¤ï¼ç®é å½å¼ç¡æ³ä½¿ç¨ generatorã
ç®é å½å¼å¯ä»¥è®æ concise body æè 平常使ç¨ç block bodyã
å¨ concise body 裡é¢åªéè¦è¼¸å
¥éç®å¼ï¼å°±æéä¸å
§å»ºçåå³ãå¨ block body 裡é¢å°±å¿
é éä¸æç¢ºç return
宣åã
var func = (x) => x * x; // concise èªæ³æå
§å»º "return"
var func = (x, y) => {
return x + y;
}; // block body éè¦æç¢ºç "return"
åå³ç©ä»¶åé¢å¼
è«æ³¨æåªä½¿ç¨ params => {object:literal}
䏦䏿æç
§ææè¬åå³ç©ä»¶åé¢å¼ï¼object literalï¼ã
var func = () => { foo: 1 }; // Calling func() returns undefined!
var func = () => { foo: function() {} }; // SyntaxError: Unexpected token (
å çºå¨å¤§æ¬å¼§ï¼{}
ï¼è£¡é¢çæåæè¢«è§£æçºæåºå®£åï¼ä¾å¦ foo
æè¢«ç¶ä½æ¨è¨ï¼labelï¼ãè䏿¯ç©ä»¶ç key ï¼
è¦è¨å¾æç©ä»¶åé¢å¼å å¨åæ¬å¼§å §ã
var func = () => ({ foo: 1 });
var func = () => ({ foo: function () {} });
æè¡
ç®é å½å¼ä¸å¯ä»¥å¨åæ¸åç®é éå 嫿è¡ã
var func = ()
=> 1; // SyntaxError: expected expression, got '=>'
Parsing order
ç®é å½å¼çç®é åç®¡ä¸æ¯æä½ç¬¦ï¼ä½èèéç®ååªå çç´ï¼ç®é å½å¼æèåæ®éå½å¼ä¸ç¸åçç¹æ®è§£æè¦åã
let callback;
callback = callback || function() {}; // ok
callback = callback || () => {}; // SyntaxError: invalid arrow-function arguments
callback = callback || (() => {}); // ok
æ´å¤ç¯ä¾
// åå³ undefined çç®é å½å¼
let empty = () => {};
(() => "foobar")(); // åå³ "foobar"
var simple = (a) => (a > 15 ? 15 : a);
simple(16); // 15
simple(10); // 10
let max = (a, b) => (a > b ? a : b);
// Easy array filtering, mapping, ...
var arr = [5, 6, 13, 0, 1, 18, 23];
var sum = arr.reduce((a, b) => a + b); // 66
var even = arr.filter((v) => v % 2 == 0); // [6, 0, 18]
var double = arr.map((v) => v * 2); // [10, 12, 26, 0, 2, 36, 46]
è¦ç¯ ç覽å¨ç¸å®¹æ§ åé±
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