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) 展开
var o = {};
o.s = 1;
(function(obj){
alert(obj.s); // 第一次为1,第二次对象就不存在了?报错
setTimeout(arguments.callee , 90)
})(o) 展开
3个回答
展开全部
//分解代码:
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);
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);
展开全部
第二次你没把对象传进去,就是说匿名函数没有传进实参。
追问
怎么改,怎么传啊?
追答
var o = {};
o.s = 1;
(function(obj){
alert(obj.s); // 第一次为1,第二次对象就不存在了?报错
setTimeout(arguments.callee(o) , 90) //把对象传进去,注意,这是个死循环
})(o)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
一楼正解
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询