var tt = 'aa';
function test(){
alert(tt);
var tt = 'dd';
alert(tt);
}
test();
为什么第一个弹出undifine呢?
又:
var tt = 'aa';
function test(){
alert(tt);
//var tt = 'dd';
//alert(tt);
}
test();
弹出aa?
求各位大神解答下
这题总结下来就2点知识:
1. 声明提升
2. 作用域链
先说后者,js在访问一个变量时会优先在该作用域(访问时的那个作用域)内寻找是否声明过该变量,如果该变量已经存在,则直接使用它的值,否则它会寻找该作用域的‘父作用域/上级作用域’,以此类推,直到找到全局作用域为止。
关于声明提升是指:js在解析的时候总是会将
var
,function
这类关键词的声明语句提升至该作用域的最顶部(注意:这里只会提升声明部分)。于是你那段代码等价于下面
所以执行的时候返回的是
undefined
和dd
.广告
更多精彩内容你或许不知道的javascript,css细节