From 80338ee9f73c16f33639afdfad59e86271ee61a3 Mon Sep 17 00:00:00 2001 From: Yige Date: Tue, 7 May 2019 05:22:41 +0800 Subject: [PATCH] Some keywords should not be translated. (#32544) --- .../es6/compare-scopes-of-the-var-and-let-keywords.chinese.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/curriculum/challenges/chinese/02-javascript-algorithms-and-data-structures/es6/compare-scopes-of-the-var-and-let-keywords.chinese.md b/curriculum/challenges/chinese/02-javascript-algorithms-and-data-structures/es6/compare-scopes-of-the-var-and-let-keywords.chinese.md index 828155f04f..bec5bca834 100644 --- a/curriculum/challenges/chinese/02-javascript-algorithms-and-data-structures/es6/compare-scopes-of-the-var-and-let-keywords.chinese.md +++ b/curriculum/challenges/chinese/02-javascript-algorithms-and-data-structures/es6/compare-scopes-of-the-var-and-let-keywords.chinese.md @@ -7,7 +7,7 @@ localeTitle: 比较var的范围并让关键字 --- ## Description -
使用var关键字声明变量时,它将全局声明,如果在函数内声明,则声明为本地。 let关键字的行为类似,但具有一些额外的功能。在块,语句或表达式中使用let关键字声明变量时,其范围仅限于该块,语句或表达式。例如:
var numArray = [];
for(var i = 0; i <3; i ++){
numArray.push(ⅰ);
}
的console.log(numArray);
//返回[0,1,2]
的console.log(ⅰ);
//返回3
使用var关键字, i被全局声明。因此,当执行i++时,它会更新全局变量。此代码类似于以下内容:
var numArray = [];
var i;
for(i = 0; i <3; i ++){
numArray.push(ⅰ);
}
的console.log(numArray);
//返回[0,1,2]
的console.log(ⅰ);
//返回3
如果您要创建一个函数并将其存储以供以后在使用i变量的for循环中使用,则此行为将导致问题。这是因为存储的函数将始终引用更新的全局i变量的值。
var printNumTwo;
for(var i = 0; i <3; i ++){
if(i === 2){
printNumTwo = function(){
回归我;
};
}
}
的console.log(printNumTwo());
//返回3
正如你所看到的, printNumTwo()打印3,而不是2.这是因为分配给该值i进行了更新和printNumTwo()返回全球i ,而不是价值i的作用是在创建for循环的时候了。 let关键字不遵循此行为:
'使用严格';
让printNumTwo;
for(let i = 0; i <3; i ++){
if(i === 2){
printNumTwo = function(){
回归我;
};
}
}
的console.log(printNumTwo());
//返回2
的console.log(ⅰ);
//返回“我没有定义”
i没有定义,因为它没有在全局范围内声明。它仅在for循环语句中声明。 printNumTwo()返回正确的值,因为循环语句中的let关键字创建了具有唯一值(0,1和2)的三个不同的i变量。
+
使用var关键字声明变量时,它将全局声明,如果在函数内声明,则声明为本地。 let关键字的行为类似,但具有一些额外的功能。在块,语句或表达式中使用let关键字声明变量时,其范围仅限于该块,语句或表达式。例如:
var numArray = [];
for(var i = 0; i <3; i ++){
numArray.push(ⅰ);
}
的console.log(numArray);
//返回[0,1,2]
的console.log(ⅰ);
//返回3
使用var关键字, i被全局声明。因此,当执行i++时,它会更新全局变量。此代码类似于以下内容:
var numArray = [];
var i;
for(i = 0; i <3; i ++){
numArray.push(ⅰ);
}
的console.log(numArray);
//返回[0,1,2]
的console.log(ⅰ);
//返回3
如果您要创建一个函数并将其存储以供以后在使用i变量的for循环中使用,则此行为将导致问题。这是因为存储的函数将始终引用更新的全局i变量的值。
var printNumTwo;
for(var i = 0; i <3; i ++){
if(i === 2){
printNumTwo = function(){
return i;
};
}
}
的console.log(printNumTwo());
//返回3
正如你所看到的, printNumTwo()打印3,而不是2.这是因为分配给该值i进行了更新和printNumTwo()返回全球i ,而不是价值i的作用是在创建for循环的时候了。 let关键字不遵循此行为:
'use strict';
让printNumTwo;
for(let i = 0; i <3; i ++){
if(i === 2){
printNumTwo = function(){
return i;
};
}
}
的console.log(printNumTwo());
//返回2
的console.log(ⅰ);
//返回“i没有定义”
i没有定义,因为它没有在全局范围内声明。它仅在for循环语句中声明。 printNumTwo()返回正确的值,因为循环语句中的let关键字创建了具有唯一值(0,1和2)的三个不同的i变量。
## Instructions
修复代码,以便i在if语句中声明的是一个单独的变量,而不是i在函数的第一行声明的变量。确保不要在代码中的任何位置使用var关键字。本练习旨在说明varlet关键字如何将范围分配给声明的变量之间的区别。在编写与本练习中使用的函数类似的函数时,通常最好使用不同的变量名来避免混淆。