JavaScript(一)--let var

156 阅读1分钟

在javaScript中,编译的时候会对var申明的变量进行检查,如果已经存在这个变量,则会忽略当前声明,执行赋值操作;

console.log(a);   // undefined(这里会发生变量提升)
var a=1;
var a=2;
console.log(a); // a

在以上三行代码中,最终编译之后的代码和以下代码结果相同

var a; // 变量提升,提升至整个作用域前面
var a; // 这里会忽略变量申明,直接跳过。
console.log(a); // undefined
a=1;
a=2;
consoel.log(a); // 2

这是编译器对var这个关键字做的编译优化处理。但是如果用let做变量的申明,则会报错,提示当前变量已经定义,不可以重新声明。(es6)

let a=1;
let a=2;
console.log(a);

相当于如下代码

let a;
a=1;
let a; // 这里会报错,因为已经存在一个a
a=2;
console.log(a);

之所以重新增加let,当程序执行的时候,可能会在外部作用域中修改内部作用域的值导致不可预知的错误。

var 声明的变量可以在它赋值之前使用(),只是初始值为一个undefined.如果没有声明直接赋值,编译器会优化为先声明,再赋值的操作。

而用let申明的变量,在变量未声明之前是不可访问的。这个不可访问的区域称为暂死性区域