前言
大家好,我是cv竹叶,今天我们来聊一聊javaScript提升,主要是变量提升和函数提升。
1、什么是变量提升?
变量提升:只有用var声明的变量,都会提前,往作用域内置顶,而赋值等操作都会停留原地。let和const 不会变量提升。
像这段代码:
number=2021;
var number;
console.log(number);//2021
输出的结果是2021,而不是undefined。因为var number提升到最顶部了。
2、什么是函数提升?
函数提升:只要声明了函数,在作用域内,任何地方都可以调用到函数,这就是函数提升。
像这段代码:
fnc();
function fnc(){
console.log('cv竹叶');
}
我们可以看到,先调用fnc()函数,再声明fnc函数,是可以正常运行的。但是需要注意的是,函数表达式不会被提升。
像这样函数表达式不会被提升:
fnc();
var fnc = function(){
console.log('cv竹叶');
}
这样会报错提示fnc()函数没有声明。因为var fnc变量被提升到fnc()函数调用之前了。
如果遇到函数提升和变量提升同时存在,函数提升会优先,变量提升会被忽略。
总结
由于JavaScript提升的存在,在同一个作用域之中无论变量声明还是函数声明,都会在代码被执行之前优先处理。