今天我们来学习一下JS特殊的变量提升属性与函数提升属性
变量提升
先举一个例子吧,我在定义变量a之前调用它,控制台没有报错,但是弹框显示undefined。
<script type="text/javascript">
alert(a);
var a=1;
</script>
以上情况出现的原因是JS的变量提升机制,将变量定义提升到了所在块最开始的地方,相当于下面代码
<script type="text/javascript">
var a;
alert(a);
a=1;
</script>
因此弹框的时候不会报错,但是a没有值
函数提升
函数提升基本类似,将函数的定义提升到JS块的最开始部位
<script type="text/javascript">
a();
function a(argument) {
alert(1);
}
</script>
相当于
<script type="text/javascript">
function a(argument) {
alert(1);
}
a();
</script>
所以基于函数提升的情况下,以下这种写法就会出现error
<script type="text/javascript">
a();
var a=function () {
// body...
alert(1);
}
</script>
显示a不是一个函数。
总结
虽然JS有变量提升机制,不过写代码的时候还是尽量规范编写,避免定义隐式函数可能出现的错误