var声明及变量提升机制:
在函数作用域或全局作用域中通过关键字var 声明的变量,无论实际上在哪里声明的,都会被当做在当前作用域顶部声明的变量
let 不会提升变量
// 正常的声明一个函数
function getToken(token) {
// 如果token为true
if (token) {
var val = '123456';
return val;
} else {
console.log(val);// 此处访问为undefind
}
}
getToken();
var的变量的提升 及JS引擎会把上面的getToken函数修改成下面这样 val变量被提升至最上面 代码如下
function getToken(token) {
var val;
// 如果token为true
if (token) {
val = '123456';
return val;
} else {
console.log(val);// 此处打印为undefind
}
}
getToken();
如果使用let 来声明 变量将不会提升 打印出来的将会报错 代码如下
function getToken(token) {
// 如果token为true
if (token) {
let val = '123456';
return val;
} else {
console.log(val);// 此处报错为Uncaught ReferenceError: val is not defined
}
}
getToken();
变量将不会提升
还有就是 let 不能重复声明
比如
var token=10;
let token=20;
// 报错 Uncaught SyntaxError: Identifier 'token' has already been declared
当然块级内还是可以的 如下
// 因为是块级作用 是没问题的
var val = 10
if (token) {
let val = 20;
}
OK var 与let 的区别 就讲解与此 谢谢观看。