一个JS的面试题及其解析

var tt='aa';
function test() {
alert(tt);
var tt = 'dd';
alert(tt);
test2();
}
function test2() {
alert(tt);
}
test();

执行test()的输出结果是 undefined dd aa 

第二个dd不难理解,但是第一个和第三个输出结果就要思考一番了。看了下资料,这其实和JS的解析器有关。调用对象初始化时,JS解析器会在相应的代码段里寻找var声明的变量,
然后在全局对象。所以当代码执行到alert(tt)时,解析器会先到test()内部找,找到了var tt这个局部变量,调用对象中创建相应的属性,此时它是未赋值的(undefined),当程序执行到var tt='dd'时,声明代码段才会给相应对象的属性赋值所以第二个输出是dd,当执行到test2内部,由于未改变过全局变量tt的值,在这里也没有定义局部变量tt,所以输出的是aa。

原文地址:https://www.cnblogs.com/linjzong/p/2718332.html