您的位置:首页 > Web前端 > JavaScript

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

2016-09-02 00:00 106 查看
先看一段代码

<script>
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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息