前言
大家好,我是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提升的存在,在同一个作用域之中无论变量声明还是函数声明,都会在代码被执行之前优先处理。