let 的块级作用域,暂时性死区和变量提升

217 阅读1分钟

image.png

变量提升和函数提升哪个优先级更高一些

函数的变量提升要优先于变量提升

函数提升,函数提升优先级高于变量提升

console.log(bar);         // f bar() { console.log(123) }
console.log(bar());       // undefined
var bar = 456;
function bar() {
    console.log(123);     // 123
}
console.log(bar);         // 456
bar = 789;
console.log(bar);         // 789
console.log(bar())        // bar is not a function

-----------------解析后
函数提升,函数提升优先级高于变量提升
var bar = function() {
    console.log(123)
};
// 变量提升,变量提升不会覆盖(同名)函数提升,只有变量再次赋值时,才会被覆盖
var bar;
console.log(bar);
console.log(bar());

bar = 456;               // 变量赋值,覆盖同名函数
console.log(bar);

bar = 789                // 再次赋值
console.log(bar);
console.log(bar());


//---------同名函数
function a(){console.log(1)}
console.log(a)
function a(){console.log(2)}
console.log(a)
a()

//---------解析完
function a(){console.log(1)}
function a(){console.log(2)}
console.log(a)
console.log(a)
a()


// --------执行, 同名函数会被覆盖。
function a(){console.log(2)}
2



// 匿名函数赋值给变量,是按照变量提升的方式,即:
var testFun = function() {};

解析时
var testFun;
testFun = function () {};
————————————————
版权声明:本文为CSDN博主「周士森」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_43690495/article/details/108565050