1.
知识点:
var的声明将被提升到到函数的顶部
let
和const
声明可以让变量在其作用域上受限于它所使用的块、语句或表达式。与var
不同的是,这些变量没有被提升,并且有一个所谓的暂时死区(TDZ)。试图访问TDZ中的这些变量将引发ReferenceError
,因为只有在执行到达声明时才能访问它们。
例子:
var a = 10; // 全局使用域
function foo() {
// var a 的声明将被提升到到函数的顶部。
// 比如:var a
console.log(a); // 打印 undefined
// TDZ 开始 创建了未初始化的'aa'
console.log(aa); //直接报错:Uncaught ReferenceError: Cannot access 'aa' before initialization
// TDZ 开始 创建了未初始化的'letTest'
console.log(letTest); //运行时候直接报错: Uncaught ReferenceError: Cannot access 'letTest' before initialization
// 实际初始化值20只发生在这里
var a = 20;
// TDZ结束,letTest 仅在此处初始化,值为test let OK
let letTest = 'test let OK.'; //let 声明的变量只在 let 命令所在的代码块内有效。
// TDZ结束,'a'仅在此处初始化,值为20
const aa = 20;
}
结论:建议少用var定义变量。定义变量时可以使用let,定义常量时可以使用const