例一:
{
let a=10;
var b=1;
}
console.log(a);
console.log(b);
结果:// Uncaught ReferenceError: a is not defined ;在执行a 结果输出时代码已经报错,因此b的结果已经被组织,b不能输出结果;
原因:
1、ES6中let命令只在所在的代码块中有效,所以a会报错;
2、a不是undefined,因为let所声明的变量一定要声明后才能使用,否则就会报错,let不存在变量提升;
//var 的情况
console.log(foo); //输出undefined
var foo=2;
console.log(foo); //输出 2
"var 存在变量提升,在没有声明变量之前,变量值undefined";
//let 情况
console.log(bar);//报错Uncaught ReferenceError: a is not defined
let bar=3;
var 变量可以在声明之前使用,值为undefined,let 所声明的变量一定要在声明之后使用,否则会报错。
ES6的特性,不存在变量提升、let只有在代码块局部有效。
例二:
var tmp=123;
if(true){
let tmp;
tmp="abc";
}
console.log(tmp);
结果:123;
原因:变量名相同,let的复制也不会影响到var的全局;let 只在代码块中有效。
let 声明的tmp,打印出来的是 abc
var 声明的tmp,打印出来的是123
var tmp=123;
if(true){
let tmp;
tmp="abc";
console.log(tmp) // abc
}
console.log(tmp); //123
但是在同一代码块中不允许重复变量
function func01(){
let a=12;
var a=3;
}
function func02(){
let a=12;
let a=3;
}
以上代码块都会报错;
网友评论