Some keywords should not be translated. (#32544)

This commit is contained in:
Yige
2019-05-07 05:22:41 +08:00
committed by Randell Dawson
parent 304262a90f
commit 80338ee9f7

View File

@ -7,7 +7,7 @@ localeTitle: 比较var的范围并让关键字
---
## Description
<section id="description">使用<code>var</code>关键字声明变量时,它将全局声明,如果在函数内声明,则声明为本地。 <code>let</code>关键字的行为类似,但具有一些额外的功能。在块,语句或表达式中使用<code>let</code>关键字声明变量时,其范围仅限于该块,语句或表达式。例如: <blockquote> var numArray = []; <br> forvar i = 0; i &lt;3; i ++{ <br> numArray.push; <br> } <br>的console.lognumArray; <br> //返回[0,1,2] <br>的console.log; <br> //返回3 </blockquote>使用<code>var</code>关键字, <code>i</code>被全局声明。因此,当执行<code>i++</code>时,它会更新全局变量。此代码类似于以下内容: <blockquote> var numArray = []; <br> var i; <br> fori = 0; i &lt;3; i ++{ <br> numArray.push; <br> } <br>的console.lognumArray; <br> //返回[0,1,2] <br>的console.log; <br> //返回3 </blockquote>如果您要创建一个函数并将其存储以供以后在使用<code>i</code>变量的for循环中使用则此行为将导致问题。这是因为存储的函数将始终引用更新的全局<code>i</code>变量的值。 <blockquote> var printNumTwo; <br> forvar i = 0; i &lt;3; i ++{ <br> ifi === 2{ <br> printNumTwo = function{ <br>回归我; <br> }; <br> } <br> } <br>的console.logprintNumTwo; <br> //返回3 </blockquote>正如你所看到的, <code>printNumTwo()</code>打印3而不是2.这是因为分配给该值<code>i</code>进行了更新和<code>printNumTwo()</code>返回全球<code>i</code> ,而不是价值<code>i</code>的作用是在创建for循环的时候了。 <code>let</code>关键字不遵循此行为: <blockquote> &#39;使用严格&#39;; <br>让printNumTwo; <br> forlet i = 0; i &lt;3; i ++{ <br> ifi === 2{ <br> printNumTwo = function{ <br>回归我; <br> }; <br> } <br> } <br>的console.logprintNumTwo; <br> //返回2 <br>的console.log; <br> //返回“没有定义” </blockquote> <code>i</code>没有定义因为它没有在全局范围内声明。它仅在for循环语句中声明。 <code>printNumTwo()</code>返回正确的值,因为循环语句中的<code>let</code>关键字创建了具有唯一值0,1和2的三个不同的<code>i</code>变量。 </section>
<section id="description">使用<code>var</code>关键字声明变量时,它将全局声明,如果在函数内声明,则声明为本地。 <code>let</code>关键字的行为类似,但具有一些额外的功能。在块,语句或表达式中使用<code>let</code>关键字声明变量时,其范围仅限于该块,语句或表达式。例如: <blockquote> var numArray = []; <br> forvar i = 0; i &lt;3; i ++{ <br> numArray.push; <br> } <br>的console.lognumArray; <br> //返回[0,1,2] <br>的console.log; <br> //返回3 </blockquote>使用<code>var</code>关键字, <code>i</code>被全局声明。因此,当执行<code>i++</code>时,它会更新全局变量。此代码类似于以下内容: <blockquote> var numArray = []; <br> var i; <br> fori = 0; i &lt;3; i ++{ <br> numArray.push; <br> } <br>的console.lognumArray; <br> //返回[0,1,2] <br>的console.log; <br> //返回3 </blockquote>如果您要创建一个函数并将其存储以供以后在使用<code>i</code>变量的for循环中使用则此行为将导致问题。这是因为存储的函数将始终引用更新的全局<code>i</code>变量的值。 <blockquote> var printNumTwo; <br> forvar i = 0; i &lt;3; i ++{ <br> ifi === 2{ <br> printNumTwo = function{ <br>return i; <br> }; <br> } <br> } <br>的console.logprintNumTwo; <br> //返回3 </blockquote>正如你所看到的, <code>printNumTwo()</code>打印3而不是2.这是因为分配给该值<code>i</code>进行了更新和<code>printNumTwo()</code>返回全球<code>i</code> ,而不是价值<code>i</code>的作用是在创建for循环的时候了。 <code>let</code>关键字不遵循此行为: <blockquote> &#39;use strict&#39;; <br>让printNumTwo; <br> forlet i = 0; i &lt;3; i ++{ <br> ifi === 2{ <br> printNumTwo = function{ <br>return i;<br> }; <br> } <br> } <br>的console.logprintNumTwo; <br> //返回2 <br>的console.log; <br> //返回“i没有定义” </blockquote> <code>i</code>没有定义因为它没有在全局范围内声明。它仅在for循环语句中声明。 <code>printNumTwo()</code>返回正确的值,因为循环语句中的<code>let</code>关键字创建了具有唯一值0,1和2的三个不同的<code>i</code>变量。 </section>
## Instructions
<section id="instructions">修复代码,以便<code>i</code>在if语句中声明的是一个单独的变量而不是<code>i</code>在函数的第一行声明的变量。确保不要在代码中的任何位置使用<code>var</code>关键字。本练习旨在说明<code>var</code><code>let</code>关键字如何将范围分配给声明的变量之间的区别。在编写与本练习中使用的函数类似的函数时,通常最好使用不同的变量名来避免混淆。 </section>