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 回答
慕娘9325324
TA贡献1783条经验 获得超4个赞
这样是全局的:
var tt = 'aa';function test() { alert(tt); }test();
这是你的例子:
var tt = 'aa';function test() { alert(tt); var tt = 'dd'; alert(tt); } test();
在函数内部使用var声明变量,是局部的。优先级高于函数外部的全局变量。
这个说明js解释器的解析顺序,尽管你的alert(tt)
在var tt = 'dd'
前面,但是它还是认为你是在内部定义了一个局部变量。
function test() { var tt; alert(tt); tt = 'dd'; alert(tt); }
素胚勾勒不出你
TA贡献1827条经验 获得超9个赞
这题总结下来就2点知识:
1. 声明提升
2. 作用域链
先说后者,js在访问一个变量时会优先在该作用域(访问时的那个作用域)内寻找是否声明过该变量,如果该变量已经存在,则直接使用它的值,否则它会寻找该作用域的‘父作用域/上级作用域’,以此类推,直到找到全局作用域为止。
关于声明提升是指:js在解析的时候总是会将var
, function
这类关键词的声明语句提升至该作用域的最顶部(注意:这里只会提升声明部分)。
于是你那段代码等价于下面
var tt = 'aa'; function test(){ var tt; //这个tt未被赋值,按js的‘规矩’,它的值是`undefined` alert(tt); tt = 'dd'; alert(tt); } test();
所以执行的时候返回的是 undefined
和 dd
.
添加回答
举报
0/150
提交
取消