之前看到论坛上有道网易的笔试题,让判断输出什么,代码如下:
var tt = 'aa';
function test(){
alert(tt);
var tt = 'dd';
alert(tt);
}
test();
答案是:undefined , dd但是如果我把代码变成如下,
var tt = 'aa';
function test(){
alert(tt);
//var tt = 'dd';
//alert(tt);
}
test();
却得到的是:aa为什么这个的得到的不是和第一段代码一样的undefined?求高手解释
var tt = 'aa';
function test(){
alert(tt);
var tt = 'dd';
alert(tt);
}
test();
答案是:undefined , dd但是如果我把代码变成如下,
var tt = 'aa';
function test(){
alert(tt);
//var tt = 'dd';
//alert(tt);
}
test();
却得到的是:aa为什么这个的得到的不是和第一段代码一样的undefined?求高手解释
function test(){
alert(tt);
var tt = 'dd';
alert(tt);
}
test();
所以这个代码的时候,在执行函数体的时候,会先识别对该作用域里的变量TT,所以当执行第一个alert(tt)的时候,它会是认为这个tt是局部变量,也就是函数体内的变量,也就是它的作用域是函数体内。 那对一个只定义不赋值的变量,它的结果是undefine。而第二个自然是dd了。
var tt = 'aa';
function test(){
alert(tt);
//var tt = 'dd';
//alert(tt);
}
test();
这个代码的花因为没在函数体内定义变量,所以自然会认为tt是全局变量也就是属于window作用域,所以就是aa了。不知道你懂没
由于你的程序未曾在function里面定义tt变量,所以默认tt局部变量为外围的全局变量.
而网易的题里面,function内部同时给予了tt的定义,所以alert("tt")不会使用全局变量,而是使用内部 的局部变量,第一个前未定义,所以为undefined....