关于变量名提升及拓展

135 阅读1分钟

js预解析

就是在 js 代码执行前做的检查

变量名提升 什么是提升?

只提供声明 不提升赋值

console.log(a)	//undefine
var a = 1
👇
var a
console.log(a)
a = 1

小结:变量提升是一件很不好的事情,意味着变量不先声明就能用了,后面程序员都尽量不使用var了,改用letconst

所以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