js预解析
就是在 js 代码执行前做的检查
变量名提升 什么是提升?
只提供声明 不提升赋值
console.log(a) //undefine
var a = 1
👇
var a
console.log(a)
a = 1
小结:变量提升是一件很不好的事情,意味着变量不先声明就能用了,后面程序员都尽量不使用var了,改用let和const
所以var不行 let和const呢?
console.log(a) //直接爆红 why 难道是没有变量名提升吗?
let a = 1
//测试一下
let a = 1;
(function() {
let a
console.log(a) //还是爆红 假设不成立
a = 2
})()
//let const 的初始化是 声明 + 赋值
//所以主角就出现了 暂时性死区其实就是在声明和使用之间的这段距离
然后继续 其实打开后台管理其中会有一个 (script)作用域的地方 虽然一直没有东西
反正就是里面会有不同作用域下的变量 Local Script Global...... 然后let声明的变量是作为一个块级作用域放在这个 Script作用域下 然后 var所声明的变量会放在全局作用域 Global 或者 Window里面
最直观说出块级作用域
{
let a = 1
console.log(a) // 1
}
console.log(a) //爆红 没有找到这个变量
深入理解暂时性死区
hd = "houdunren";
function run() {
console.log(hd); //Cannot access 'hd' before initialization
let hd = "hdcms";
}
run();
function run() {
let hd;
console.log(hd); //undefined
}
run();
⚠
暂时性死区拓展
function hd(a = b, b = 3) {
console.log(a)
}
hd(); //报错
function hd(a = 2, b = a) {
console.log(b)
}
hd(); // b = 2