众所周知,js是一种解释型语言,在代码执行前,会先进行预解析,再执行。预解析的第一步是先检查代码有误错误,如果有语法错误会直接终止程序。第二步是声明提升。今天我们就主要来看看关于声明提升的这些事。
1.变量提升
<script>
console.log(b);
var b=15;
</script>
变量提升把变量声明分为声明、赋值两个部分,而提升只会把声明提升到最前面,原位置只保留赋值部分,所以我们会看到打印出的结果如下:
2.函数提升
函数的创建有函数声明式、函数赋值式,只有函数声明式才可以提升。而函数提升不同于变量提升的是,函数提升会把函数整体提升到最前面。
<script>
foo(6,8)
function foo(a,b){
document.write(a+b+"<br>");
}
</script>
在这段代码中,实参在最上面,运行结果为:
结果还是正确的,所以可见函数提升会把函数整体提到前面,相当于一个整体提升。
3.变量提升和函数提升的优先级
了解了变量提升和函数提升后,他们的优先级是怎么样的呢?我们来通过代码测试一下。
<script>
console.log(foo);
function foo(){
};
var foo=10;
</script>
打印结果为函数,而不是undefined,说明变量提升优先级高于函数提升优先级。