今天我們來學習一下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有變量提升機制,不過寫代碼的時候還是儘量規範編寫,避免定義隱式函數可能出現的錯誤