举例代码1:
<script>
var a = "旧的a";
function myfun(){
alert(a+"\n");
var a = "新的a"; /*①*/
alert(a);
}
myfun();
</script>
会先弹出undefined,再弹出新的a。疑惑就是第一个应该弹旧的a,但是确实显示a没有定义,这也是js的一个坑为什么会这样呢?因为js的变量提升机制,会将①处的新的a的声明(只提声明,不提值)提到函数的顶端,所以第一个alert()会显示a没有定义。
举例代码2:
<script>
var a = "旧的a";
function myfun(){
alert(a+"\n");
a = "新的a"; /*①*/
alert(a);
}
myfun();
</script>
为什么这次第一个alert()会显示旧的a呢?因为①处的代码没有用var定义,所以这只是把旧的a进行新的赋值。也就是说新的a并没有声明可提。