一、var的声明作用域:
使用var操作符定义的变量会成为包含它的函数的局部变量。比如,使用var在一个函数内部定义一个变量,就意味着该变量将在函数退出时被销毁。
function test() {
var message = "hi"; // 局部变量
mess = "hi"; // 全局变量
}
test()
console.log(message,mess) // message报错,mess成功输出
二、var的声明提升:
关键字声明的变量会自动提升到函数作用域顶部,var重复声明也没有问题。
function foo() {
// var age 声明提升到了这里
console.log(age);
var age = 26;
}
foo(); // undefined 这里不会报错,因为age的声明被提升.
三、let的声明作用域:
let与var最大的区别是,let声明的范围是块作用域,而var声明的范围是函数作用域。let不允许重复声明。
函数作用域 > 块作用域
// if是块作用域,非函数作用域,var出了块作用域不会被销毁。
if (true) {
var name = 'Matt';
console.log(name); // Matt
let age = 26;
console.log(age); // 26
}
console.log(name); // Matt
console.log(age); // ReferenceError: age没有定义
四、let不存在声明提升(暂时性死区):
在let声明之前的执行瞬间被称为“暂时性死区”(temporal dead zone),在此阶段引用任何后面才声明的变量都会抛出ReferenceError。
console.log(message) // 报错
let message = "hi"
本文链接:https://blog.csdn.net/qq_43145310/article/details/125737211
————————————————
版权声明:本文为CSDN博主「静止呀」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_43145310/article/details/125737211