From e408fb16283f052f8e00c047cb885e34b9b8fdd5 Mon Sep 17 00:00:00 2001 From: stosSe4r <25627391+stosSe4r@users.noreply.github.com> Date: Wed, 25 May 2022 15:25:08 +0800 Subject: [PATCH 01/25] improve translation for 1-js/06-advanced-functions/02-rest-parameters-spread --- .../02-rest-parameters-spread/article.md | 60 +++++++++---------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/1-js/06-advanced-functions/02-rest-parameters-spread/article.md b/1-js/06-advanced-functions/02-rest-parameters-spread/article.md index 48a2a8c13e..8a82f078b8 100644 --- a/1-js/06-advanced-functions/02-rest-parameters-spread/article.md +++ b/1-js/06-advanced-functions/02-rest-parameters-spread/article.md @@ -4,15 +4,15 @@ 例如: -- `Math.max(arg1, arg2, ..., argN)` —— 返回入参中的最大值。 +- `Math.max(arg1, arg2, ..., argN)` —— 返回参数中的最大值。 - `Object.assign(dest, src1, ..., srcN)` —— 依次将属性从 `src1..N` 复制到 `dest`。 - ……等。 -在本章中,我们将学习如何编程实现支持函数可传入任意数量的参数。以及,如何将数组作为参数传递给这类函数。 +在本章中,我们将学习如何编写可传入任意数量参数的函数,以及如何将数组作为参数传递给这类函数。 ## Rest 参数 `...` -在 JavaScript 中,无论函数是如何定义的,你都可以使用任意数量的参数调用函数。 +在 JavaScript 中,调用任何函数时都可以传入任意数量的参数。 例如: ```js run @@ -23,9 +23,9 @@ function sum(a, b) { alert( sum(1, 2, 3, 4, 5) ); ``` -虽然这里不会因为传入“过多”的参数而报错。但是当然,在结果中只有前两个参数被计算进去了。 +这个函数不会因为传入过多的参数而报错。当然,只有前两个参数被求和了。 -Rest 参数可以通过使用三个点 `...` 并在后面跟着包含剩余参数的数组名称,来将它们包含在函数定义中。这些点的字面意思是“将剩余参数收集到一个数组中”。 +我们可以在函数定义中声明一个数组来收集参数。语法是这样的: `...变量名` ,这将会声明一个数组并指定其名称,其中存有多余的参数。这三个点的语义就是“收集多余的参数并存进指定数组中”。 例如,我们需要把所有的参数都放到数组 `args` 中: @@ -43,9 +43,9 @@ alert( sumAll(1, 2) ); // 3 alert( sumAll(1, 2, 3) ); // 6 ``` -我们也可以选择获取第一个参数作为变量,并将剩余的参数收集起来。 +我们也可以正常地声明一些参数,并将剩余的参数收进数组中。 -下面的例子把前两个参数定义为变量,并把剩余的参数收集到 `titles` 数组中: +下面这个函数声明了两个参数,并把剩余的参数收集到 `titles` 数组中: ```js run function showName(firstName, lastName, ...titles) { @@ -70,12 +70,12 @@ function f(arg1, ...rest, arg2) { // arg2 在 ...rest 后面?! } ``` -`...rest` 必须处在最后。 +`...rest` 必须写在参数列表最后。 ```` ## "arguments" 变量 -有一个名为 `arguments` 的特殊的类数组对象,该对象按参数索引包含所有参数。 +每个函数都带有一个名为 `arguments` 的特殊的类数组对象,该对象以参数在列表中的位置作为下标,存储所有参数。 例如: @@ -96,16 +96,16 @@ showName("Julius", "Caesar"); showName("Ilya"); ``` -在过去,JavaScript 中没有 rest 参数,而使用 `arguments` 是获取函数所有参数的唯一方法。现在它仍然有效,我们可以在一些老代码里找到它。 +在过去,JavaScript 中不支持 rest 参数语法,而使用 `arguments` 是获取函数所有参数的唯一方法。为了支持以前的代码,这种写法仍然有效。 -但缺点是,尽管 `arguments` 是一个类数组,也是可迭代对象,但它终究不是数组。它不支持数组方法,因此我们不能调用 `arguments.map(...)` 等方法。 +这种写法有其缺点。尽管 `arguments` 是一个类数组,也是可迭代对象,但它终究不是数组。它不支持数组方法,因此我们不能调用 `arguments.map(...)` 等方法。 -此外,它始终包含所有参数,我们不能像使用 rest 参数那样只截取入参的一部分。 +此外,它始终包含所有参数,我们不能像使用 rest 参数那样只截取参数的一部分。 -因此,当我们需要这些功能时,最好使用 rest 参数。 +因此当我们需要这些功能时,最好使用 rest 参数。 ````smart header="箭头函数没有 `\"arguments\"`" -如果我们在箭头函数中访问 `arguments`,访问到的 `arguments` 并不属于箭头函数,而是属于箭头函数外部的“普通”函数。 +如果我们在箭头函数中访问 `arguments`,访问到的 `arguments` 并不属于箭头函数,而是调用箭头函数的外部“普通”函数。 举个例子: @@ -124,9 +124,9 @@ f(1); // 1 ## Spread 语法 [#spread-syntax] -我们刚刚看到了如何从参数列表中获取数组。 +我们刚刚看到了在参数列表中声明一个数组以收集多个参数的语法。 -不过有时候我们也需要做与之相反的事儿。 +有时我们也需要与之相反的语法。 例如,内建函数 [Math.max](mdn:js/Math/max) 会返回参数中最大的值: @@ -134,9 +134,9 @@ f(1); // 1 alert( Math.max(3, 5, 1) ); // 5 ``` -假如我们有一个数组 `[3, 5, 1]`,我们该如何用它调用 `Math.max` 呢? +如果我们有一个数组 `[3, 5, 1]`,我们该如何用它调用 `Math.max` 呢? -直接把数组“原样”传入是不会奏效的,因为 `Math.max` 希望你传入一个列表形式的数值型参数,而不是一个数组: +直接传入这个数组是不会奏效的,因为 `Math.max` 期望一列数值型的参数,而不是一个数组: ```js run let arr = [3, 5, 1]; @@ -146,9 +146,9 @@ alert( Math.max(arr) ); // NaN */!* ``` -毫无疑问,我们不可能手动地去一一设置参数 `Math.max(arg[0], arg[1], arg[2])`,因为我们不确定这儿有多少个。在脚本执行时,可能参数数组中有很多个元素,也可能一个都没有。并且这样设置的代码也很丑。 +毫无疑问,我们不能手动设置参数 `Math.max(arg[0], arg[1], arg[2])`,因为我们不确定有多少个参数。在代码执行时,参数数组中可能有很多个元素,也可能一个都没有。而且,这样编写的代码难以阅读。 -**Spread 语法** 来帮助你了!它看起来和 rest 参数很像,也使用 `...`,但是二者的用途完全相反。 +**Spread 语法** 可以解决这个问题。它看起来和 rest 参数很像,也使用 `...`,但是二者的用途完全相反。 当在函数调用中使用 `...arr` 时,它会把可迭代对象 `arr` “展开”到参数列表中。 @@ -160,7 +160,7 @@ let arr = [3, 5, 1]; alert( Math.max(...arr) ); // 5(spread 语法把数组转换为参数列表) ``` -我们还可以通过这种方式传递多个可迭代对象: +我们还可以通过这种方式传入多个可迭代对象: ```js run let arr1 = [1, -2, 3, 4]; @@ -169,7 +169,7 @@ let arr2 = [8, 3, -8, 1]; alert( Math.max(...arr1, ...arr2) ); // 8 ``` -我们甚至还可以将 spread 语法与常规值结合使用: +我们甚至还可以将 spread 语法与常规参数结合使用: ```js run @@ -192,7 +192,7 @@ let merged = [0, ...arr, 2, ...arr2]; alert(merged); // 0,3,5,1,2,8,9,15(0,然后是 arr,然后是 2,然后是 arr2) ``` -在上面的示例中,我们使用数组展示了 spread 语法,其实任何可迭代对象都可以。 +在上面的示例中,我们使用 spread 语法展开了一些数组。其实任何可迭代对象都可以使用 spread 语法展开。 例如,在这儿我们使用 spread 语法将字符串转换为字符数组: @@ -206,7 +206,7 @@ Spread 语法内部使用了迭代器来收集元素,与 `for..of` 的方式 因此,对于一个字符串,`for..of` 会逐个返回该字符串中的字符,`...str` 也同理会得到 `"H","e","l","l","o"` 这样的结果。随后,字符列表被传递给数组初始化器 `[...str]`。 -对于这个特定任务,我们还可以使用 `Array.from` 来实现,因为该方法会将一个可迭代对象(如字符串)转换为数组: +对于这个特定任务,我们还可以使用 `Array.from` 来完成,因为该方法会将一个可迭代对象(如字符串)转换为数组: ```js run let str = "Hello"; @@ -217,7 +217,7 @@ alert( Array.from(str) ); // H,e,l,l,o 运行结果与 `[...str]` 相同。 -不过 `Array.from(obj)` 和 `[...obj]` 存在一个细微的差别: +注意 `Array.from(obj)` 和 `[...obj]` 存在一个细微的差别: - `Array.from` 适用于类数组对象也适用于可迭代对象。 - Spread 语法只适用于可迭代对象。 @@ -273,12 +273,12 @@ alert(JSON.stringify(obj)); // {"a":1,"b":2,"c":3,"d":4} alert(JSON.stringify(objCopy)); // {"a":1,"b":2,"c":3} ``` -这种方式比使用 `let arrCopy = Object.assign([], arr)` 来复制数组,或使用 `let objCopy = Object.assign({}, obj)` 来复制对象写起来要短得多。因此,只要情况允许,我们更喜欢使用它。 +这种方式比使用 `let arrCopy = Object.assign([], arr)` 复制数组,或使用 `let objCopy = Object.assign({}, obj)` 复制对象较为简便。因此,只要情况允许,我们倾向于使用它。 ## 总结 -当我们在代码中看到 `"..."` 时,它要么是 rest 参数,要么就是 spread 语法。 +当我们在代码中看到 `"..."` 时,它要么是 rest 参数,要么是 spread 语法。 有一个简单的方法可以区分它们: @@ -288,8 +288,8 @@ alert(JSON.stringify(objCopy)); // {"a":1,"b":2,"c":3} 使用场景: - Rest 参数用于创建可接受任意数量参数的函数。 -- Spread 语法用于将数组传递给通常需要含有许多参数的列表的函数。 +- Spread 语法用于将数组传递给通常需要含有许多参数的函数。 -它们俩的出现帮助我们轻松地在列表和参数数组之间来回转换。 +我们可以使用这两种语法轻松地互相转换列表与参数数组。 -“旧式”的 `arguments`(类数组且可迭代的对象)也依然能够帮助我们获取函数调用中的所有参数。 +旧式的 `arguments`(类数组且可迭代的对象)也依然能够帮助我们获取函数调用中的所有参数。 From 68ed58536d946cdb427d96d1adfeb2a469588703 Mon Sep 17 00:00:00 2001 From: stosSe4r <25627391+stosSe4r@users.noreply.github.com> Date: Wed, 25 May 2022 15:33:33 +0800 Subject: [PATCH 02/25] Update article.md --- 1-js/06-advanced-functions/02-rest-parameters-spread/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/06-advanced-functions/02-rest-parameters-spread/article.md b/1-js/06-advanced-functions/02-rest-parameters-spread/article.md index 8a82f078b8..3c92311f26 100644 --- a/1-js/06-advanced-functions/02-rest-parameters-spread/article.md +++ b/1-js/06-advanced-functions/02-rest-parameters-spread/article.md @@ -75,7 +75,7 @@ function f(arg1, ...rest, arg2) { // arg2 在 ...rest 后面?! ## "arguments" 变量 -每个函数都带有一个名为 `arguments` 的特殊的类数组对象,该对象以参数在列表中的位置作为下标,存储所有参数。 +每个函数都带有一个名为 `arguments` 的特殊的类数组对象,该对象以参数在列表中的位置作为键,存储所有参数。 例如: From b2184d85b1cd3e0304588007d666e413ceaf9c49 Mon Sep 17 00:00:00 2001 From: stosSe4r <25627391+stosSe4r@users.noreply.github.com> Date: Wed, 25 May 2022 15:35:52 +0800 Subject: [PATCH 03/25] Update article.md --- 1-js/06-advanced-functions/02-rest-parameters-spread/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/06-advanced-functions/02-rest-parameters-spread/article.md b/1-js/06-advanced-functions/02-rest-parameters-spread/article.md index 3c92311f26..2fe98c0edd 100644 --- a/1-js/06-advanced-functions/02-rest-parameters-spread/article.md +++ b/1-js/06-advanced-functions/02-rest-parameters-spread/article.md @@ -146,7 +146,7 @@ alert( Math.max(arr) ); // NaN */!* ``` -毫无疑问,我们不能手动设置参数 `Math.max(arg[0], arg[1], arg[2])`,因为我们不确定有多少个参数。在代码执行时,参数数组中可能有很多个元素,也可能一个都没有。而且,这样编写的代码难以阅读。 +毫无疑问,我们不能手动展开 `arg` 数组传入,例如 `Math.max(arg[0], arg[1], arg[2])` 。我们不确定有多少个参数————在代码执行时,参数数组中可能有很多个元素,也可能一个都没有。而且,这样的代码难以阅读。 **Spread 语法** 可以解决这个问题。它看起来和 rest 参数很像,也使用 `...`,但是二者的用途完全相反。 From be30b50dcf15d1fd033f9c327b37e067f96745a7 Mon Sep 17 00:00:00 2001 From: stosSe4r <25627391+stosSe4r@users.noreply.github.com> Date: Thu, 9 Jun 2022 20:22:50 +0800 Subject: [PATCH 04/25] Update 1-js/06-advanced-functions/02-rest-parameters-spread/article.md Co-authored-by: Songhn --- 1-js/06-advanced-functions/02-rest-parameters-spread/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/06-advanced-functions/02-rest-parameters-spread/article.md b/1-js/06-advanced-functions/02-rest-parameters-spread/article.md index 2fe98c0edd..43f1546e94 100644 --- a/1-js/06-advanced-functions/02-rest-parameters-spread/article.md +++ b/1-js/06-advanced-functions/02-rest-parameters-spread/article.md @@ -75,7 +75,7 @@ function f(arg1, ...rest, arg2) { // arg2 在 ...rest 后面?! ## "arguments" 变量 -每个函数都带有一个名为 `arguments` 的特殊的类数组对象,该对象以参数在列表中的位置作为键,存储所有参数。 +有一个名为 `arguments` 的特殊类数组对象可以在函数中被访问,该对象以参数在列表中的位置作为键,存储所有参数。 例如: From 4e50d37ce649896a447f40b13057c6f0b671233d Mon Sep 17 00:00:00 2001 From: stosSe4r <25627391+stosSe4r@users.noreply.github.com> Date: Thu, 9 Jun 2022 20:22:57 +0800 Subject: [PATCH 05/25] Update 1-js/06-advanced-functions/02-rest-parameters-spread/article.md Co-authored-by: Songhn --- 1-js/06-advanced-functions/02-rest-parameters-spread/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/06-advanced-functions/02-rest-parameters-spread/article.md b/1-js/06-advanced-functions/02-rest-parameters-spread/article.md index 43f1546e94..4990723cbc 100644 --- a/1-js/06-advanced-functions/02-rest-parameters-spread/article.md +++ b/1-js/06-advanced-functions/02-rest-parameters-spread/article.md @@ -273,7 +273,7 @@ alert(JSON.stringify(obj)); // {"a":1,"b":2,"c":3,"d":4} alert(JSON.stringify(objCopy)); // {"a":1,"b":2,"c":3} ``` -这种方式比使用 `let arrCopy = Object.assign([], arr)` 复制数组,或使用 `let objCopy = Object.assign({}, obj)` 复制对象较为简便。因此,只要情况允许,我们倾向于使用它。 +这种方式比使用 `let arrCopy = Object.assign([], arr)` 复制数组,或使用 `let objCopy = Object.assign({}, obj)` 复制对象来说更为简便。因此,只要情况允许,我们倾向于使用它。 ## 总结 From c5ad2e39844047262740ca2a8ac84315be698eaf Mon Sep 17 00:00:00 2001 From: stosSe4r <25627391+stosSe4r@users.noreply.github.com> Date: Thu, 9 Jun 2022 20:30:39 +0800 Subject: [PATCH 06/25] suggest a refinement for 1-js/06/02 --- .../02-rest-parameters-spread/article.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/1-js/06-advanced-functions/02-rest-parameters-spread/article.md b/1-js/06-advanced-functions/02-rest-parameters-spread/article.md index 4990723cbc..c6afa8952f 100644 --- a/1-js/06-advanced-functions/02-rest-parameters-spread/article.md +++ b/1-js/06-advanced-functions/02-rest-parameters-spread/article.md @@ -124,9 +124,9 @@ f(1); // 1 ## Spread 语法 [#spread-syntax] -我们刚刚看到了在参数列表中声明一个数组以收集多个参数的语法。 +我们刚刚看到了如何从参数列表中获取数组。 -有时我们也需要与之相反的语法。 +有时候我们也需要做与之相反的事。 例如,内建函数 [Math.max](mdn:js/Math/max) 会返回参数中最大的值: From 76d4d03a56cc281931531c40b78f1a812794b9d5 Mon Sep 17 00:00:00 2001 From: LeviDing Date: Mon, 11 Jul 2022 12:48:17 +0800 Subject: [PATCH 07/25] Update 1-js/06-advanced-functions/02-rest-parameters-spread/article.md --- 1-js/06-advanced-functions/02-rest-parameters-spread/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/06-advanced-functions/02-rest-parameters-spread/article.md b/1-js/06-advanced-functions/02-rest-parameters-spread/article.md index c6afa8952f..9a58c66e3e 100644 --- a/1-js/06-advanced-functions/02-rest-parameters-spread/article.md +++ b/1-js/06-advanced-functions/02-rest-parameters-spread/article.md @@ -8,7 +8,7 @@ - `Object.assign(dest, src1, ..., srcN)` —— 依次将属性从 `src1..N` 复制到 `dest`。 - ……等。 -在本章中,我们将学习如何编写可传入任意数量参数的函数,以及如何将数组作为参数传递给这类函数。 +在本章中,我们将学习如何编写支持传入任意数量参数的函数,以及如何将数组作为参数传递给这类函数。 ## Rest 参数 `...` From 70d9cb749fd2844936a9aa6ac5bb48713e8b3364 Mon Sep 17 00:00:00 2001 From: LeviDing Date: Mon, 11 Jul 2022 12:48:39 +0800 Subject: [PATCH 08/25] Update 1-js/06-advanced-functions/02-rest-parameters-spread/article.md --- 1-js/06-advanced-functions/02-rest-parameters-spread/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/06-advanced-functions/02-rest-parameters-spread/article.md b/1-js/06-advanced-functions/02-rest-parameters-spread/article.md index 9a58c66e3e..38ce07c039 100644 --- a/1-js/06-advanced-functions/02-rest-parameters-spread/article.md +++ b/1-js/06-advanced-functions/02-rest-parameters-spread/article.md @@ -12,7 +12,7 @@ ## Rest 参数 `...` -在 JavaScript 中,调用任何函数时都可以传入任意数量的参数。 +在 JavaScript 中,无论函数是如何定义的,你都可以在调用它时传入任意数量的参数。 例如: ```js run From 8bc103a07a73a2411bd8c1f176805c9698fb14f0 Mon Sep 17 00:00:00 2001 From: LeviDing Date: Mon, 11 Jul 2022 12:50:31 +0800 Subject: [PATCH 09/25] Update 1-js/06-advanced-functions/02-rest-parameters-spread/article.md --- 1-js/06-advanced-functions/02-rest-parameters-spread/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/06-advanced-functions/02-rest-parameters-spread/article.md b/1-js/06-advanced-functions/02-rest-parameters-spread/article.md index 38ce07c039..7917395d55 100644 --- a/1-js/06-advanced-functions/02-rest-parameters-spread/article.md +++ b/1-js/06-advanced-functions/02-rest-parameters-spread/article.md @@ -23,7 +23,7 @@ function sum(a, b) { alert( sum(1, 2, 3, 4, 5) ); ``` -这个函数不会因为传入过多的参数而报错。当然,只有前两个参数被求和了。 +虽然这里这个函数不会因为传入过多的参数而报错。但是,当然,只有前两个参数被求和了。 我们可以在函数定义中声明一个数组来收集参数。语法是这样的: `...变量名` ,这将会声明一个数组并指定其名称,其中存有多余的参数。这三个点的语义就是“收集多余的参数并存进指定数组中”。 From f043ff946013b83dfd79e8c7231e0e759fcf582e Mon Sep 17 00:00:00 2001 From: LeviDing Date: Mon, 11 Jul 2022 12:51:14 +0800 Subject: [PATCH 10/25] Update 1-js/06-advanced-functions/02-rest-parameters-spread/article.md --- 1-js/06-advanced-functions/02-rest-parameters-spread/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/06-advanced-functions/02-rest-parameters-spread/article.md b/1-js/06-advanced-functions/02-rest-parameters-spread/article.md index 7917395d55..db54c7668a 100644 --- a/1-js/06-advanced-functions/02-rest-parameters-spread/article.md +++ b/1-js/06-advanced-functions/02-rest-parameters-spread/article.md @@ -25,7 +25,7 @@ alert( sum(1, 2, 3, 4, 5) ); 虽然这里这个函数不会因为传入过多的参数而报错。但是,当然,只有前两个参数被求和了。 -我们可以在函数定义中声明一个数组来收集参数。语法是这样的: `...变量名` ,这将会声明一个数组并指定其名称,其中存有多余的参数。这三个点的语义就是“收集多余的参数并存进指定数组中”。 +我们可以在函数定义中声明一个数组来收集参数。语法是这样的:`...变量名`,这将会声明一个数组并指定其名称,其中存有剩余的参数。这三个点的语义就是“收集剩余的参数并存进指定数组中”。 例如,我们需要把所有的参数都放到数组 `args` 中: From dcca6a36fdf1119066ee6e5b943bf390afc73ecf Mon Sep 17 00:00:00 2001 From: LeviDing Date: Mon, 11 Jul 2022 12:52:20 +0800 Subject: [PATCH 11/25] Update 1-js/06-advanced-functions/02-rest-parameters-spread/article.md --- 1-js/06-advanced-functions/02-rest-parameters-spread/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/06-advanced-functions/02-rest-parameters-spread/article.md b/1-js/06-advanced-functions/02-rest-parameters-spread/article.md index db54c7668a..b5280d0c97 100644 --- a/1-js/06-advanced-functions/02-rest-parameters-spread/article.md +++ b/1-js/06-advanced-functions/02-rest-parameters-spread/article.md @@ -43,7 +43,7 @@ alert( sumAll(1, 2) ); // 3 alert( sumAll(1, 2, 3) ); // 6 ``` -我们也可以正常地声明一些参数,并将剩余的参数收进数组中。 +我们也可以选择将第一个参数获取为变量,并将剩余的参数收集起来。 下面这个函数声明了两个参数,并把剩余的参数收集到 `titles` 数组中: From 2d79cf59b81c6993fca5acbeea53c686b69ea171 Mon Sep 17 00:00:00 2001 From: LeviDing Date: Mon, 11 Jul 2022 12:52:38 +0800 Subject: [PATCH 12/25] Update 1-js/06-advanced-functions/02-rest-parameters-spread/article.md --- 1-js/06-advanced-functions/02-rest-parameters-spread/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/06-advanced-functions/02-rest-parameters-spread/article.md b/1-js/06-advanced-functions/02-rest-parameters-spread/article.md index b5280d0c97..b8a4abd227 100644 --- a/1-js/06-advanced-functions/02-rest-parameters-spread/article.md +++ b/1-js/06-advanced-functions/02-rest-parameters-spread/article.md @@ -45,7 +45,7 @@ alert( sumAll(1, 2, 3) ); // 6 我们也可以选择将第一个参数获取为变量,并将剩余的参数收集起来。 -下面这个函数声明了两个参数,并把剩余的参数收集到 `titles` 数组中: +下面的例子把前两个参数获取为变量,并把剩余的参数收集到 `titles` 数组中: ```js run function showName(firstName, lastName, ...titles) { From 0ed6d1c42ba873ef044d52667d69ed3a083c3077 Mon Sep 17 00:00:00 2001 From: LeviDing Date: Mon, 11 Jul 2022 12:53:32 +0800 Subject: [PATCH 13/25] Update 1-js/06-advanced-functions/02-rest-parameters-spread/article.md --- 1-js/06-advanced-functions/02-rest-parameters-spread/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/06-advanced-functions/02-rest-parameters-spread/article.md b/1-js/06-advanced-functions/02-rest-parameters-spread/article.md index b8a4abd227..7d8d74af9f 100644 --- a/1-js/06-advanced-functions/02-rest-parameters-spread/article.md +++ b/1-js/06-advanced-functions/02-rest-parameters-spread/article.md @@ -75,7 +75,7 @@ function f(arg1, ...rest, arg2) { // arg2 在 ...rest 后面?! ## "arguments" 变量 -有一个名为 `arguments` 的特殊类数组对象可以在函数中被访问,该对象以参数在列表中的位置作为键,存储所有参数。 +有一个名为 `arguments` 的特殊类数组对象可以在函数中被访问,该对象以参数在参数列表中的索引作为键,存储所有参数。 例如: From 2bb6bd2e155375696a20070eb1c95e1a30aa99c9 Mon Sep 17 00:00:00 2001 From: LeviDing Date: Mon, 11 Jul 2022 12:54:09 +0800 Subject: [PATCH 14/25] Update 1-js/06-advanced-functions/02-rest-parameters-spread/article.md --- 1-js/06-advanced-functions/02-rest-parameters-spread/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/06-advanced-functions/02-rest-parameters-spread/article.md b/1-js/06-advanced-functions/02-rest-parameters-spread/article.md index 7d8d74af9f..04be0ae044 100644 --- a/1-js/06-advanced-functions/02-rest-parameters-spread/article.md +++ b/1-js/06-advanced-functions/02-rest-parameters-spread/article.md @@ -96,7 +96,7 @@ showName("Julius", "Caesar"); showName("Ilya"); ``` -在过去,JavaScript 中不支持 rest 参数语法,而使用 `arguments` 是获取函数所有参数的唯一方法。为了支持以前的代码,这种写法仍然有效。 +在过去,JavaScript 中不支持 rest 参数语法,而使用 `arguments` 是获取函数所有参数的唯一方法。现在它仍然有效,我们可以在一些老代码里找到它。 这种写法有其缺点。尽管 `arguments` 是一个类数组,也是可迭代对象,但它终究不是数组。它不支持数组方法,因此我们不能调用 `arguments.map(...)` 等方法。 From 2e73d21f0f117ac4915061185e195f1193a89a5b Mon Sep 17 00:00:00 2001 From: LeviDing Date: Mon, 11 Jul 2022 12:54:30 +0800 Subject: [PATCH 15/25] Update 1-js/06-advanced-functions/02-rest-parameters-spread/article.md --- 1-js/06-advanced-functions/02-rest-parameters-spread/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/06-advanced-functions/02-rest-parameters-spread/article.md b/1-js/06-advanced-functions/02-rest-parameters-spread/article.md index 04be0ae044..0dff38b513 100644 --- a/1-js/06-advanced-functions/02-rest-parameters-spread/article.md +++ b/1-js/06-advanced-functions/02-rest-parameters-spread/article.md @@ -98,7 +98,7 @@ showName("Ilya"); 在过去,JavaScript 中不支持 rest 参数语法,而使用 `arguments` 是获取函数所有参数的唯一方法。现在它仍然有效,我们可以在一些老代码里找到它。 -这种写法有其缺点。尽管 `arguments` 是一个类数组,也是可迭代对象,但它终究不是数组。它不支持数组方法,因此我们不能调用 `arguments.map(...)` 等方法。 +但缺点是,尽管 `arguments` 是一个类数组,也是可迭代对象,但它终究不是数组。它不支持数组方法,因此我们不能调用 `arguments.map(...)` 等方法。 此外,它始终包含所有参数,我们不能像使用 rest 参数那样只截取参数的一部分。 From 4494e4aea777e02514d8346fd9d05530ffe531a1 Mon Sep 17 00:00:00 2001 From: LeviDing Date: Mon, 11 Jul 2022 12:54:42 +0800 Subject: [PATCH 16/25] Update 1-js/06-advanced-functions/02-rest-parameters-spread/article.md --- 1-js/06-advanced-functions/02-rest-parameters-spread/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/06-advanced-functions/02-rest-parameters-spread/article.md b/1-js/06-advanced-functions/02-rest-parameters-spread/article.md index 0dff38b513..2a86d368d2 100644 --- a/1-js/06-advanced-functions/02-rest-parameters-spread/article.md +++ b/1-js/06-advanced-functions/02-rest-parameters-spread/article.md @@ -102,7 +102,7 @@ showName("Ilya"); 此外,它始终包含所有参数,我们不能像使用 rest 参数那样只截取参数的一部分。 -因此当我们需要这些功能时,最好使用 rest 参数。 +因此,当我们需要这些功能时,最好使用 rest 参数。 ````smart header="箭头函数没有 `\"arguments\"`" 如果我们在箭头函数中访问 `arguments`,访问到的 `arguments` 并不属于箭头函数,而是调用箭头函数的外部“普通”函数。 From e2b940edea9ff5318649375dba380375b7baf357 Mon Sep 17 00:00:00 2001 From: LeviDing Date: Mon, 11 Jul 2022 12:54:59 +0800 Subject: [PATCH 17/25] Update 1-js/06-advanced-functions/02-rest-parameters-spread/article.md --- 1-js/06-advanced-functions/02-rest-parameters-spread/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/06-advanced-functions/02-rest-parameters-spread/article.md b/1-js/06-advanced-functions/02-rest-parameters-spread/article.md index 2a86d368d2..4fb217c4e8 100644 --- a/1-js/06-advanced-functions/02-rest-parameters-spread/article.md +++ b/1-js/06-advanced-functions/02-rest-parameters-spread/article.md @@ -105,7 +105,7 @@ showName("Ilya"); 因此,当我们需要这些功能时,最好使用 rest 参数。 ````smart header="箭头函数没有 `\"arguments\"`" -如果我们在箭头函数中访问 `arguments`,访问到的 `arguments` 并不属于箭头函数,而是调用箭头函数的外部“普通”函数。 +如果我们在箭头函数中访问 `arguments`,访问到的 `arguments` 并不属于箭头函数,而是属于箭头函数外部的“普通”函数。 举个例子: From 008d25773290e1604c1b43372b978d14e959ea9d Mon Sep 17 00:00:00 2001 From: LeviDing Date: Mon, 11 Jul 2022 12:55:21 +0800 Subject: [PATCH 18/25] Update 1-js/06-advanced-functions/02-rest-parameters-spread/article.md --- 1-js/06-advanced-functions/02-rest-parameters-spread/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/06-advanced-functions/02-rest-parameters-spread/article.md b/1-js/06-advanced-functions/02-rest-parameters-spread/article.md index 4fb217c4e8..a5ac65a219 100644 --- a/1-js/06-advanced-functions/02-rest-parameters-spread/article.md +++ b/1-js/06-advanced-functions/02-rest-parameters-spread/article.md @@ -136,7 +136,7 @@ alert( Math.max(3, 5, 1) ); // 5 如果我们有一个数组 `[3, 5, 1]`,我们该如何用它调用 `Math.max` 呢? -直接传入这个数组是不会奏效的,因为 `Math.max` 期望一列数值型的参数,而不是一个数组: +直接“原样”传入这个数组是不会奏效的,因为 `Math.max` 期望的是 list 形式的数值型参数,而不是一个数组: ```js run let arr = [3, 5, 1]; From 6a08dffbe927c43f0cdc1ddde1577f0cdac25fe7 Mon Sep 17 00:00:00 2001 From: LeviDing Date: Mon, 11 Jul 2022 12:56:15 +0800 Subject: [PATCH 19/25] Update 1-js/06-advanced-functions/02-rest-parameters-spread/article.md --- 1-js/06-advanced-functions/02-rest-parameters-spread/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/06-advanced-functions/02-rest-parameters-spread/article.md b/1-js/06-advanced-functions/02-rest-parameters-spread/article.md index a5ac65a219..05168774f7 100644 --- a/1-js/06-advanced-functions/02-rest-parameters-spread/article.md +++ b/1-js/06-advanced-functions/02-rest-parameters-spread/article.md @@ -136,7 +136,7 @@ alert( Math.max(3, 5, 1) ); // 5 如果我们有一个数组 `[3, 5, 1]`,我们该如何用它调用 `Math.max` 呢? -直接“原样”传入这个数组是不会奏效的,因为 `Math.max` 期望的是 list 形式的数值型参数,而不是一个数组: +直接“原样”传入这个数组是不会奏效的,因为 `Math.max` 期望的是列表形式的数值型参数,而不是一个数组: ```js run let arr = [3, 5, 1]; From 47911c72e322dfc7f9132e96d97b6ab326ce95fd Mon Sep 17 00:00:00 2001 From: LeviDing Date: Mon, 11 Jul 2022 13:30:25 +0800 Subject: [PATCH 20/25] Update 1-js/06-advanced-functions/02-rest-parameters-spread/article.md --- 1-js/06-advanced-functions/02-rest-parameters-spread/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/06-advanced-functions/02-rest-parameters-spread/article.md b/1-js/06-advanced-functions/02-rest-parameters-spread/article.md index 05168774f7..b6892f4f40 100644 --- a/1-js/06-advanced-functions/02-rest-parameters-spread/article.md +++ b/1-js/06-advanced-functions/02-rest-parameters-spread/article.md @@ -146,7 +146,7 @@ alert( Math.max(arr) ); // NaN */!* ``` -毫无疑问,我们不能手动展开 `arg` 数组传入,例如 `Math.max(arg[0], arg[1], arg[2])` 。我们不确定有多少个参数————在代码执行时,参数数组中可能有很多个元素,也可能一个都没有。而且,这样的代码难以阅读。 +毫无疑问,我们不能手动地去一一设置参数 `Math.max(arg[0], arg[1], arg[2])`,因为我们不确定这儿有多少个。在代码执行时,参数数组中可能有很多个元素,也可能一个都没有。而且,这样的代码也很不优雅。 **Spread 语法** 可以解决这个问题。它看起来和 rest 参数很像,也使用 `...`,但是二者的用途完全相反。 From aa4a79c89b043aa2af9f52f1eaed69dc12ee25da Mon Sep 17 00:00:00 2001 From: LeviDing Date: Mon, 11 Jul 2022 13:30:50 +0800 Subject: [PATCH 21/25] Update 1-js/06-advanced-functions/02-rest-parameters-spread/article.md --- 1-js/06-advanced-functions/02-rest-parameters-spread/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/06-advanced-functions/02-rest-parameters-spread/article.md b/1-js/06-advanced-functions/02-rest-parameters-spread/article.md index b6892f4f40..dd1f1010fa 100644 --- a/1-js/06-advanced-functions/02-rest-parameters-spread/article.md +++ b/1-js/06-advanced-functions/02-rest-parameters-spread/article.md @@ -148,7 +148,7 @@ alert( Math.max(arr) ); // NaN 毫无疑问,我们不能手动地去一一设置参数 `Math.max(arg[0], arg[1], arg[2])`,因为我们不确定这儿有多少个。在代码执行时,参数数组中可能有很多个元素,也可能一个都没有。而且,这样的代码也很不优雅。 -**Spread 语法** 可以解决这个问题。它看起来和 rest 参数很像,也使用 `...`,但是二者的用途完全相反。 +**Spread 语法** 可以解决这个问题!它看起来和 rest 参数很像,也使用 `...`,但是二者的用途完全相反。 当在函数调用中使用 `...arr` 时,它会把可迭代对象 `arr` “展开”到参数列表中。 From 36c567aea2df9cce7cdbdde7d3b19a404b080769 Mon Sep 17 00:00:00 2001 From: LeviDing Date: Mon, 11 Jul 2022 13:31:10 +0800 Subject: [PATCH 22/25] Update 1-js/06-advanced-functions/02-rest-parameters-spread/article.md --- 1-js/06-advanced-functions/02-rest-parameters-spread/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/06-advanced-functions/02-rest-parameters-spread/article.md b/1-js/06-advanced-functions/02-rest-parameters-spread/article.md index dd1f1010fa..d04608bd35 100644 --- a/1-js/06-advanced-functions/02-rest-parameters-spread/article.md +++ b/1-js/06-advanced-functions/02-rest-parameters-spread/article.md @@ -169,7 +169,7 @@ let arr2 = [8, 3, -8, 1]; alert( Math.max(...arr1, ...arr2) ); // 8 ``` -我们甚至还可以将 spread 语法与常规参数结合使用: +我们甚至还可以将 spread 语法与常规值结合使用: ```js run From 330d08640b41e37515fc67c0509a9d6ac8ae0f21 Mon Sep 17 00:00:00 2001 From: LeviDing Date: Mon, 11 Jul 2022 13:31:31 +0800 Subject: [PATCH 23/25] Update 1-js/06-advanced-functions/02-rest-parameters-spread/article.md --- 1-js/06-advanced-functions/02-rest-parameters-spread/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/06-advanced-functions/02-rest-parameters-spread/article.md b/1-js/06-advanced-functions/02-rest-parameters-spread/article.md index d04608bd35..f312a956f0 100644 --- a/1-js/06-advanced-functions/02-rest-parameters-spread/article.md +++ b/1-js/06-advanced-functions/02-rest-parameters-spread/article.md @@ -192,7 +192,7 @@ let merged = [0, ...arr, 2, ...arr2]; alert(merged); // 0,3,5,1,2,8,9,15(0,然后是 arr,然后是 2,然后是 arr2) ``` -在上面的示例中,我们使用 spread 语法展开了一些数组。其实任何可迭代对象都可以使用 spread 语法展开。 +在上面的示例中,我们使用数组展示了 spread 语法,其实我们可以用 spread 语法这样操作任何可迭代对象。 例如,在这儿我们使用 spread 语法将字符串转换为字符数组: From f298a56e45d1b470aca636f26c3332c1483e5abc Mon Sep 17 00:00:00 2001 From: LeviDing Date: Mon, 11 Jul 2022 13:31:42 +0800 Subject: [PATCH 24/25] Update 1-js/06-advanced-functions/02-rest-parameters-spread/article.md --- 1-js/06-advanced-functions/02-rest-parameters-spread/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/06-advanced-functions/02-rest-parameters-spread/article.md b/1-js/06-advanced-functions/02-rest-parameters-spread/article.md index f312a956f0..98c72da7a7 100644 --- a/1-js/06-advanced-functions/02-rest-parameters-spread/article.md +++ b/1-js/06-advanced-functions/02-rest-parameters-spread/article.md @@ -206,7 +206,7 @@ Spread 语法内部使用了迭代器来收集元素,与 `for..of` 的方式 因此,对于一个字符串,`for..of` 会逐个返回该字符串中的字符,`...str` 也同理会得到 `"H","e","l","l","o"` 这样的结果。随后,字符列表被传递给数组初始化器 `[...str]`。 -对于这个特定任务,我们还可以使用 `Array.from` 来完成,因为该方法会将一个可迭代对象(如字符串)转换为数组: +对于这个特定任务,我们还可以使用 `Array.from` 来实现,因为该方法会将一个可迭代对象(如字符串)转换为数组: ```js run let str = "Hello"; From 25b9460adcb55c8d0e1ab4883e3b76508b2f84eb Mon Sep 17 00:00:00 2001 From: LeviDing Date: Mon, 11 Jul 2022 13:31:50 +0800 Subject: [PATCH 25/25] Update 1-js/06-advanced-functions/02-rest-parameters-spread/article.md --- 1-js/06-advanced-functions/02-rest-parameters-spread/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/06-advanced-functions/02-rest-parameters-spread/article.md b/1-js/06-advanced-functions/02-rest-parameters-spread/article.md index 98c72da7a7..a6efac76ee 100644 --- a/1-js/06-advanced-functions/02-rest-parameters-spread/article.md +++ b/1-js/06-advanced-functions/02-rest-parameters-spread/article.md @@ -217,7 +217,7 @@ alert( Array.from(str) ); // H,e,l,l,o 运行结果与 `[...str]` 相同。 -注意 `Array.from(obj)` 和 `[...obj]` 存在一个细微的差别: +不过 `Array.from(obj)` 和 `[...obj]` 存在一个细微的差别: - `Array.from` 适用于类数组对象也适用于可迭代对象。 - Spread 语法只适用于可迭代对象。