JavaScript 有个特性称为函数声明提前;
先看一段代码:结果是弹出 0 ,和预期一样,
<script>
var abc=0;
(function(){
alert(abc);
}());
</script>
再看第二段代码:结果是undefined,
<script>
var abc=0;
(function(){
alert(abc);
var abc=1;
}());
</script>
为什么这里的结果是 undefined 呢?
其实通过js引擎解析的过程,我们可以这样来改写代码;
<script>
var abc=0;
(function(){
var abc;
alert(abc);
abc=1;
console.log(abc);
}());
console.log(abc);
</script>
函数内部第一步是把声明放在最上面,赋值是在声明之后,所以产生 undefined 的结果;