变量提升:
先来看一下例子吧:
1、
<script>
console.log(a);//undefined
var a = 2;
</script>
2、
<script>
console.log(a);
</script>
解释:第一个例子输出的是undefined,是因为此处存在变量提升,引擎在执行js代码的时候会自动把变量的声明提到最前面,注意,只是声明!
例1的变量提升
<script>
var a;
console.log(a)
a = 2
</script>
例2 我就不多说了,a变量未定义,正常的报错。
函数提升:
<script>
show();
function show() {
console.log('show');//show
}
</script>
如上代码能正常输出“show”,是因为函数也存在提升。JS 在解析的时候会把我们的函数体提升到上面
<script>
show();
var show = function () {
console.log('show');
}
</script>
如上,其实是变量show的提升,此时的show是undefined,所以爆出如图错误。
show()//show1
function show() {
console.log('show1');
}
var show = function () {
console.log('show2');
}
如上,输出的是“show1”,这是因为函数提升的优先级要高于变量提升