From 6ca84f1794af830ada9736d7289ce29aabb04ca3 Mon Sep 17 00:00:00 2001 From: t7yang Date: Mon, 10 Jan 2022 08:38:05 +0800 Subject: remove `notranslate` class in zh-TW --- .../reference/functions/arrow_functions/index.html | 40 +++++++++++----------- 1 file changed, 20 insertions(+), 20 deletions(-) (limited to 'files/zh-tw/web/javascript/reference/functions/arrow_functions') diff --git a/files/zh-tw/web/javascript/reference/functions/arrow_functions/index.html b/files/zh-tw/web/javascript/reference/functions/arrow_functions/index.html index 82285afeae..0b53f14444 100644 --- a/files/zh-tw/web/javascript/reference/functions/arrow_functions/index.html +++ b/files/zh-tw/web/javascript/reference/functions/arrow_functions/index.html @@ -11,7 +11,7 @@ translation_of: Web/JavaScript/Reference/Functions/Arrow_functions

基本語法

-
(參數1, 參數2, …, 參數N) => { 陳述式; }
+
(參數1, 參數2, …, 參數N) => { 陳述式; }
 
 (參數1, 參數2, …, 參數N) => 表示式;
 // 等相同(參數1, 參數2, …, 參數N) => { return 表示式; }
@@ -26,7 +26,7 @@ translation_of: Web/JavaScript/Reference/Functions/Arrow_functions
 
 

進階語法

-
// 用大括號將內容括起來,返回一個物件字面值表示法:
+
// 用大括號將內容括起來,返回一個物件字面值表示法:
 params => ({foo: bar})
 
 // 支援其餘參數預設參數
@@ -46,7 +46,7 @@ var f = ([a, b] = [1, 2], {x: c} = {x: a + b}) => a + b + c; f(); // 6
 
 

更短的函式寫法

-
var elements = [
+
var elements = [
   'Hydrogen',
   'Helium',
   'Lithium',
@@ -96,7 +96,7 @@ elements.map(({ length }) => length); // [8, 6, 7, 9]
 
 

事實證明這對物件導向程式設計來說並不理想。

-
function Person() {
+
function Person() {
   // Person() 建構式將 this 定義為它自己的一個實體
   this.age = 0;
 
@@ -112,7 +112,7 @@ var p = new Person();

在 ECMAScript 3/5 裡面,有關 this 的問題,可以透過指派 this 值給可以關閉的變數解決。

-
function Person() {
+
function Person() {
   var self = this; // 有些人喜歡 `that` 而不是 `self`.
                    // 選好一種取法後始終如一
   self.age = 0;
@@ -129,7 +129,7 @@ var p = new Person();

因此,在以下程式碼內,傳遞給 setInterval 的 箭頭函式中的this ,會與封閉函式的 this 值相同:

-
function Person(){
+
function Person(){
   this.age = 0;
 
   setInterval(() => {
@@ -143,7 +143,7 @@ var p = new Person();

由於 this 變數具有詞彙上綁定意義,所以嚴格模式的宣告對 this 的作用將被忽略。

-
var f = () => {'use strict'; return this};
+
var f = () => {'use strict'; return this};
 f() === window; // 或是 global 物件

但嚴格模式的其他作用依舊存在。

@@ -152,7 +152,7 @@ f() === window; // 或是 global 物件

由於箭頭函式並沒有自己的 this,所以透過 call()apply() 呼叫箭頭函式只能傳入參數。thisArg 將會被忽略。

-
var adder = {
+
var adder = {
   base : 1,
   add : function(a) {
     var f = v => v + this.base;
@@ -174,7 +174,7 @@ console.log(adder.addThruCall(1)); // 依舊顯示 2
 
 

箭頭函式並沒有自己的 arguments 物件。所以在此例中,arguments 只是參考到 enclosing 作用域裡面的相同變數:

-
var arguments = [1, 2, 3];
+
var arguments = [1, 2, 3];
 var arr = () => arguments[0];
 
 arr(); // 1
@@ -188,7 +188,7 @@ foo(1); // 2

大多時候,使用其餘參數 是取代 arguments 物件的較好方式。

-
function foo(n) {
+
function foo(n) {
   var f = (...args) => args[0] + n;
   return f(10);
 }
@@ -199,7 +199,7 @@ foo(1); // 11

如同前述,箭頭函式運算式最適合用在非方法的函式。來看看如果要把它們當成方法來用,會發生什麼事:

-
'use strict';
+
'use strict';
 var obj = {
   i: 10,
   b: () => console.log(this.i, this),
@@ -212,7 +212,7 @@ obj.c(); // 印出 10, Object {...}

箭頭函式並沒有自己的 this。另一個例子與 {{jsxref("Object.defineProperty()")}} 有關:

-
'use strict';
+
'use strict';
 
 var obj = {
   a: 10
@@ -230,14 +230,14 @@ Object.defineProperty(obj, 'b', {
 
 

箭頭函式不可作為建構式使用;若使用於建構式,會在使用 new 時候拋出錯誤。

-
var Foo = () => {};
+
var Foo = () => {};
 var foo = new Foo(); // TypeError: Foo is not a constructor

使用 prototype 屬性

箭頭函式並沒有原型(prototype)屬性。

-
var Foo = () => {};
+
var Foo = () => {};
 console.log(Foo.prototype); // undefined
 
@@ -251,21 +251,21 @@ console.log(Foo.prototype); // undefined

在 concise body 裡面只需要輸入運算式,就會附上內建的回傳。在 block body 裡面就必須附上明確的 return 宣告。

-
var func = x => x * x;                  // concise 語法會內建 "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: 1 };               // Calling func() returns undefined!
 var func = () => { foo: function() {} };   // SyntaxError: Unexpected token (

因為在大括弧({})裡面的文字會被解析為有序宣告(例如 foo 會被當作標記(label)、而不是物件的 key )

要記得把物件字面值包在圓括弧內。

-
var func = () => ({foo: 1});
+
var func = () => ({foo: 1});
 var func = () => ({ foo: function() {} }); 
 
@@ -273,14 +273,14 @@ var func = () => ({ foo: function() {} });

箭頭函式不可以在參數及箭頭間包含換行。

-
var func = ()
+
var func = ()
            => 1; // SyntaxError: expected expression, got '=>'

Parsing order

箭頭函式的箭頭儘管不是操作符,但藉著運算子優先等級,箭頭函式有著和普通函式不相同的特殊解析規則。

-
let callback;
+
let callback;
 
 callback = callback || function() {}; // ok
 callback = callback || () => {};      // SyntaxError: invalid arrow-function arguments
@@ -288,7 +288,7 @@ callback = callback || (() => {});    // ok

更多範例

-
// 回傳 undefined 的箭頭函式
+
// 回傳 undefined 的箭頭函式
 let empty = () => {};
 
 (() => "foobar")() // 回傳 "foobar"
-- 
cgit v1.2.3-54-g00ecf