首页 新闻 会员 周边

一个关于js作用域的问题

0
[待解决问题]

function test(xxx){
alert(xxx)
var xxx = 123;
function xxx(){
}
alert(xxx)
}
test(444);

输出的是 function,123

能解释下为什么输出结果是这样的吗?

问题补充: function test(xxx){ alert(xxx) var xxx = 123; function xxx(){ } alert(xxx) } test(444); 输出的是 function,123 汗。。自己把题目搞错了。应该是这样的。
djune的主页 djune | 初学一级 | 园豆:150
提问于:2010-10-24 13:35
< >
分享
所有回答(2)
0

var 之后相当与重定义了

慧☆星 | 园豆:5640 (大侠五级) | 2010-10-24 14:21
0

解析后你的代码会变成这样:

function test(xxx){

var xxx; //定交
function xxx(){ //相当于xxx = function() {},覆盖掉原来的xxx的定义
}

xxx = 123; //又覆盖掉上一条的定义

}
test(444);

Gray Zhang | 园豆:17610 (专家六级) | 2010-10-24 15:39
根据我的问题补充,再解释下行不?
支持(0) 反对(0) djune | 园豆:150 (初学一级) | 2010-10-24 16:47
相当于 function test(xxx) { var xxx; xxx = function() {}; alert(xxx) xxx = 123; alert(xxx) } function xxx和var xxx都是定义 xxx = 123是赋值 JS解析器将所有定义放到函数顶部 类似var xxx = 123将被分解为定义和赋值2部分,定义提到顶部,赋值在代码中应该出现的位置
支持(0) 反对(0) Gray Zhang | 园豆:17610 (专家六级) | 2010-10-24 16:53
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册