js作用域链中声明变量提前

先看一段javascript代码

<script type="text/javascript">
var test = "Rainn";
function say() 
{
    alert(test);
    var test = "Tom";
    alert(test);
}

say(); //调用方法

</script>

结果是什么?

第一反应是,第一次alert的时候,say的作用域中"还"没有声明 test ,所以应该向上级作用域中寻找,因此第一次alert的结果是 "Rainn"。第二次alert的时候,在作用域内重新声明了局部的变量 test,所以第二次是Tom。

那么实际结果呢?结果是弹出undefined跟Tom。

因为在js的作用域中,会把当前作用域中声明的变量提升到顶部,上述代码等价于

<script>
var test = "Rainn";
function say() 
{
    var test;
    alert(test);
    var test = "Tom";
    alert(test);
}

say();

</script>

所以第一次执行才会弹出undefined。

声明:禁止任何非法用途使用,凡因违规使用而引起的任何法律纠纷,本站概不负责。

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

精彩评论

全部回复12人评论7,777人参与