Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何理解';让';在';对于';陈述_Javascript_Scope_Ecmascript 5 - Fatal编程技术网

Javascript 如何理解';让';在';对于';陈述

Javascript 如何理解';让';在';对于';陈述,javascript,scope,ecmascript-5,Javascript,Scope,Ecmascript 5,据我所知,“let”用于声明块变量。但它不能用同一个名称声明两次。例如: 'use strict'; let a = 1; let a = 2; // syntax error 那么,如何用相同的变量名分隔“for”迭代中的每个作用域呢 'use strict'; for(let i = 0; i < 3; i++){ setTimeout(function(){ console.log(i); }); } // output: // 0 // 1 //

据我所知,“let”用于声明块变量。但它不能用同一个名称声明两次。例如:

'use strict';
let a = 1;
let a = 2; // syntax error
那么,如何用相同的变量名分隔“for”迭代中的每个作用域呢

'use strict';
for(let i = 0; i < 3; i++){
    setTimeout(function(){
        console.log(i);
    });
}
// output: 
// 0
// 1
// 2
“严格使用”;
for(设i=0;i<3;i++){
setTimeout(函数(){
控制台日志(i);
});
}
//输出:
// 0
// 1
// 2
解释器是否静默地更改变量名?任何信息将不胜感激


我不认为这是一个重复的问题。因为我真的想问的是两种理论之间的冲突。

将变量的范围限定到它所在的块。 将作用域分配给
a
后,不能覆盖它。所以第二次使用let时,它无法处理

正确的用法是:

'use strict';
let a = 1;
a = 2;

在for循环中,我只在开始时声明,在每次迭代中它都会更改它的值

let用于指定您将再次在其中写入值的变量

在第一个示例中,您定义了名为“a”的变量,因此无法定义另一个同名变量,但可以更改它的值,这在for循环中发生

'use strict';
let a = 1;
let a = 2; // syntax error

'use strict';
let a = 1;
var a = 2; this will overwrite...
这里您已经指定了一个值。。您的意图是,它不应该在运行时更改。因此,一旦在块中以相同的类型声明,您就无法更改它

这就是为什么你会犯这个错误

let
is值的意图不应改变

在循环中,
它将在迭代时分开。。所以它在运行时打印值。因此它不会覆盖它…

允许创建一次变量,但变量的值可以更改, 示例-

     let t =5// 
    let t = 6 // throws an errow but 
    t =7 
 console.log(t) - gives 7

在第一个示例中,变量
a
在同一范围内定义了两次。这会给您一个错误,因为变量已经存在
let
不允许这样做,使用
var重新声明会这样做。这是使用
let
的一个优点

var a=3;
var a=2;
console.log(a);//2.
设b=3;
设b=2//语法错误
设c=3;

var c=2//循环中还有一个语法错误
,变量没有再次声明,但只增加了它的值。 它类似于以下内容:

'use strict';
 let i = 0;
 i = i + 1;
考虑反复迭代代码,直到条件失败。

for(让i=0;i<3;i++){
//代码
}

步骤:

  • 设i=0


  • checkout
    问题不在于第一个代码块,而在于它在for循环中是如何工作的。第一个代码是OP,表示他理解
    let
    是如何工作的。他在
    for
    循环中请求
    let
    。我认为没有重复。我想知道这两个原则之间的冲突。你可以试着运行你的代码来了解它是如何工作的。这不是真的。如中所述,每次迭代
    i
    都会得到一个新的绑定。@Ivar您的权利,将立即更改它