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