chore(i18n,curriculum): update translations (#44138)
This commit is contained in:
@ -8,11 +8,13 @@ dashedName: compare-scopes-of-the-var-and-let-keywords
|
||||
|
||||
# --description--
|
||||
|
||||
使用 `var` 關鍵字來聲明一個變量的時候,這個變量會被聲明成全局變量,或是函數內的局部變量。
|
||||
如果你不熟悉 `let`,請查看 [這個挑戰](/learn/javascript-algorithms-and-data-structures/basic-javascript/explore-differences-between-the-var-and-let-keywords)。
|
||||
|
||||
`let` 關鍵字的作用與此類似,但會有一些額外的特性。 如果在代碼塊、語句或表達式中使用關鍵字 `let` 聲明變量,這個變量的作用域就被限制在當前的代碼塊、語句或表達式之中。
|
||||
使用 `var` 關鍵字聲明變量時,它是全局聲明的,如果在函數內部聲明則是局部聲明的。
|
||||
|
||||
舉個例子:
|
||||
`let` 關鍵字的行爲類似,但有一些額外的功能。 在代碼塊、語句或表達式中使用 `let` 關鍵字聲明變量時,其作用域僅限於該代碼塊、語句或表達式。
|
||||
|
||||
例如:
|
||||
|
||||
```js
|
||||
var numArray = [];
|
||||
@ -23,9 +25,9 @@ console.log(numArray);
|
||||
console.log(i);
|
||||
```
|
||||
|
||||
這裏控制檯將顯示值 `[0, 1, 2]` 和 `3`。
|
||||
此處控制檯將顯示值 `[0, 1, 2]` 和 `3`。
|
||||
|
||||
因爲使用了 `var` 關鍵字,`i` 被聲明爲全局變量。 所以當 `i++` 執行時,它會更新全局變量。 這個代碼和下方的代碼類似:
|
||||
使用 `var` 關鍵字,`i` 是全局聲明的。 所以當 `i++` 被執行時,它會更新全局變量。 此代碼類似於以下內容:
|
||||
|
||||
```js
|
||||
var numArray = [];
|
||||
@ -37,9 +39,9 @@ console.log(numArray);
|
||||
console.log(i);
|
||||
```
|
||||
|
||||
這裏控制檯將顯示值 `[0, 1, 2]` 和 `3`。
|
||||
此處控制檯將顯示值 `[0, 1, 2]` 和 `3`。
|
||||
|
||||
如果你創建一個函數,將它存儲起來,稍後在使用 `i` 變量的 `for` 循環中使用。這麼做可能會出現問題。 這是因爲存儲的函數會總是指向更新後的全局 `i` 變量的值。
|
||||
如果你創建一個函數,將它存儲起來,稍後在使用 `i` 變量的 `for` 循環中使用。這麼做可能會出現問題。 這是因爲存儲的函數將始終引用更新後的全局 `i` 變量的值。
|
||||
|
||||
```js
|
||||
var printNumTwo;
|
||||
@ -53,9 +55,9 @@ for (var i = 0; i < 3; i++) {
|
||||
console.log(printNumTwo());
|
||||
```
|
||||
|
||||
這裏控制檯將顯示值 `3`。
|
||||
此處控制檯將顯示值 `3`。
|
||||
|
||||
可以看到,`printNumTwo()` 打印了 3,而不是 2。 這是因爲賦值給 `i` 的值已經更新,`printNumTwo()` 返回全局的 `i`,而不是在 for 循環中創建函數時 `i` 的值。 `let` 關鍵字就不會出現這種現象:
|
||||
可以看到,`printNumTwo()` 打印了 3 而不是 2。 這是因爲賦值給 `i` 的值已經更新,`printNumTwo()` 返回全局的 `i`,而不是在 for 循環中創建函數時 `i` 的值。 `let` 關鍵字就不會出現這種現象:
|
||||
|
||||
```js
|
||||
let printNumTwo;
|
||||
@ -72,7 +74,7 @@ console.log(i);
|
||||
|
||||
在這裏控制檯將顯示值 `2` 和一個錯誤提示 `i is not defined`。
|
||||
|
||||
`i` 未定義,因爲它沒有在全局範圍內聲明。 它只在 `for` 循環語句中被聲明。 `printNumTwo()` 返回了正確的值,因爲 `let` 關鍵字在循環語句中使 `i` 變量產生了三個不同的值(分別爲 0、1、2)。
|
||||
`i` 未定義,因爲它沒有在全局範圍內聲明。 它只在 `for` 循環語句中被聲明。 `printNumTwo()` 返回了正確的值,因爲 `let` 關鍵字創建了三個具有唯一值(0、1 和 2)的不同 `i` 變量在循環語句中。
|
||||
|
||||
# --instructions--
|
||||
|
||||
|
@ -8,11 +8,13 @@ dashedName: mutate-an-array-declared-with-const
|
||||
|
||||
# --description--
|
||||
|
||||
在現代的 JavaScript 裏,`const` 聲明有很多用法。
|
||||
如果你不熟悉 `const`,請查看[這個挑戰](/learn/javascript-algorithms-and-data-structures/basic-javascript/declare-a-read-only-variable-with-the-const-keyword)。
|
||||
|
||||
一些開發者傾向於默認使用 `const` 來聲明所有變量,除非他們打算後續重新給變量賦值, 那麼他們在聲明的時候就會用 `let`。
|
||||
`const` 聲明在現代 JavaScript 中有很多用例。
|
||||
|
||||
然而,你要注意,對象(包括數組和函數)在使用 `const` 聲明的時候依然是可變的。 使用 `const` 來聲明只會保證變量不會被重新賦值。
|
||||
默認情況下,一些開發人員更喜歡使用 `const` 分配所有變量,除非他們知道需要重新分配值。 只有在這種情況下,他們才使用 `let`。
|
||||
|
||||
但是,重要的是要了解使用 `const` 分配給變量的對象(包括數組和函數)仍然是可變的。 使用 `const` 聲明只能防止變量標識符的重新分配。
|
||||
|
||||
```js
|
||||
const s = [5, 6, 7];
|
||||
@ -21,13 +23,13 @@ s[2] = 45;
|
||||
console.log(s);
|
||||
```
|
||||
|
||||
`s = [1, 2, 3]` 會導致一個錯誤。 `console.log` 會顯示值 `[5, 6, 45]`。
|
||||
`s = [1, 2, 3]` 將導致錯誤。 `console.log` 將顯示值 `[5, 6, 45]`。
|
||||
|
||||
可以發現,你可以改變對象 `[5, 6, 7]` 本身,而變量 `s` 會指向改變後的數組 `[5, 6, 45]`。 和所有數組一樣,數組 `s` 中的元素是可以被改變的,但是因爲使用了 `const` 關鍵字,你不能使用賦值操作符將變量標識 `s` 指向另外一個數組。
|
||||
如你所見,你可以改變對象 `[5, 6, 7]` 本身,變量 `s` 仍將指向更改後的數組 `[5, 6, 45]`。 像所有數組一樣,`s` 中的數組元素是可變的,但是因爲使用了 `const`,所以不能使用變量標識符 `s` 來指向一個使用賦值運算符的不同數組。
|
||||
|
||||
# --instructions--
|
||||
|
||||
這裏有一個使用 `const s = [5, 7, 2]` 聲明的數組。 使用對各元素賦值的方法將數組改成 `[2, 5, 7]`。
|
||||
數組聲明爲 `const s = [5, 7, 2]`。 使用對各元素賦值的方法將數組改成 `[2, 5, 7]`。
|
||||
|
||||
# --hints--
|
||||
|
||||
@ -37,7 +39,7 @@ console.log(s);
|
||||
(getUserInput) => assert(getUserInput('index').match(/const/g));
|
||||
```
|
||||
|
||||
`s` 應該爲常量(使用 `const`)。
|
||||
`s` 應該是一個常量變量(通過使用 `const`)。
|
||||
|
||||
```js
|
||||
(getUserInput) => assert(getUserInput('index').match(/const\s+s/g));
|
||||
|
Reference in New Issue
Block a user