1.var声明容易让人迷惑
2.在作用域中的变量声明会在编译阶段被提前到作用域前面,哪怕if条件是false,else里面也能访问到在if中声明的变量
function getValue(condition){
if(condition){
var value="blue";
return value;
}else{
console.log(value);
return null;
}
console.log(value);
}
undefined
getValue()
VM196:6 undefined
null
function getValue(condition){
var value;
if(condition){
value="blue";
}else{
return null;
}
}
undefined
3.块级声明就能控制变量的生命周期
块级包括:
函数内部
字符{}之间的区域
4.let块级声明,不会被提升,需要在块的顶部声明,当if条件true的时候,变量才会被定义,只要离开if,变量就会被销毁,在else中永远访问不到if中定义的变量
function getValue(condition){
if(condition){
let value="blue";
return value;
}else{
return null;
}
}
undefined
5.禁止重声明,不能在同一级作用域中用let重新定义变量,会报错,可以在嵌套的作用域中重新定义变量
var count=30
undefined
let count=30
VM458:1 Uncaught SyntaxError: Identifier 'count' has already been declared
at <anonymous>:1:1
(anonymous) @ VM458:1
var int=10;
undefined
if(true){
let int=20;
}
undefined
6...