javascript setTimeout的问题

为什么在匿名函数中,第一次对象存在,第二次就不存在?varo={};o.s=1;(function(obj){alert(obj.s);//第一次为1,第二次对象就不存在... 为什么在匿名函数中,第一次对象存在,第二次就不存在?
var o = {};
o.s = 1;
(function(obj){
alert(obj.s); // 第一次为1,第二次对象就不存在了?报错
setTimeout(arguments.callee , 90)
})(o)
展开
 我来答
forzhp
2012-09-17 · TA获得超过1412个赞
知道小有建树答主
回答量:297
采纳率:0%
帮助的人:424万
展开全部
//分解代码:
var o = {
s:1
};
var temp = function(obj){
alert(obj.s);
setTimeout(function(){
temp();//注意这里参数丢了
},90);
}
temp(o);

第二次执行的时候没有传递o进去,所以相当于调用undefined.s,浏览器会抛出异常obj is undefined
修改:
var o = {
s: 1
};
var temp = function(obj) {
alert(obj.s);
var func = arguments.callee;
setTimeout(function(){func(obj);},90);
}
temp(o);
可可的文档
2012-09-17 · TA获得超过234个赞
知道答主
回答量:78
采纳率:0%
帮助的人:73.2万
展开全部
第二次你没把对象传进去,就是说匿名函数没有传进实参。
追问
怎么改,怎么传啊?
追答
var o = {};
o.s = 1;
(function(obj){
alert(obj.s); // 第一次为1,第二次对象就不存在了?报错
setTimeout(arguments.callee(o) , 90) //把对象传进去,注意,这是个死循环
})(o)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友629278b
2012-09-21 · TA获得超过201个赞
知道小有建树答主
回答量:277
采纳率:100%
帮助的人:113万
展开全部
一楼正解
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式