匿名函数中使用setTimeout问题

crazyleaves_test 2012-03-13 02:17:46
一直对闭包,匿名函数之类的搞不清楚,今天本来想用匿名函数封装个方法的,碰到一个问题,请教各位大侠

想要实现的效果:每隔两秒输出 fn1;

代码:

(function(){
var fn1 = function(){
console.log("fn1")
setTimeout("fn1()",2000);
},
fn2 = function(){
console.log("fn2")
setTimeout("fn1()",2000)
}
fn2();
})()



这个如果我把(function(){})()去掉的话,就没问题了。

不然的话,就会 输出一个 fn2,再报错 :fn1 is not defined。

我是觉得我是错在闭包理解上,求通熟易懂的解释!
或者能够在 (function(){})() 里实现这个功能。。


...全文
201 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
伙柴人 2012-03-13
  • 打赏
  • 举报
回复
fn2 = function(){
console.log("fn2")
setTimeout("fn1()",2000) //这个时候调用fn1()时,fn1()已经被销毁,所以找不到~~~
}

lihanbing 2012-03-13
  • 打赏
  • 举报
回复

(function(){
var fn1 = function(){
console.log("fn1")
setTimeout(fn1,2000);
},
fn2 = function(){
console.log("fn2")
setTimeout(fn1,2000)
}
fn2();
})()
Acesidonu 2012-03-13
  • 打赏
  • 举报
回复
setTimeout(function(){ fn1(); }, 2000);//这个fn1()调用的是局部的fn1函数


setTimeout("fn1()",2000)//这个fn1()调用的是全局的fn1函数
不知道我说的对不对
xuzuning 2012-03-13
  • 打赏
  • 举报
回复
function(){ fn1(); }
不是指明位置了吗?
crazyleaves_test 2012-03-13
  • 打赏
  • 举报
回复
额,那为啥在setTimeout里面的fn1变成这样 function(){ fn1(); };就可以呢?

setTimeout(function(){ fn1(); }, 2000);


[Quote=引用 3 楼 acesidonu 的回复:]

去掉就是全局的,当然能找到了。
[/Quote]
Acesidonu 2012-03-13
  • 打赏
  • 举报
回复
去掉就是全局的,当然能找到了。
crazyleaves_test 2012-03-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zswang 的回复:]

JScript code
(function(){
var fn1 = function(){
console.log("fn1")
setTimeout(function(){ fn1(); }, 2000);
},
fn2 = function(){
console.log("fn2")
s……
[/Quote]

求解释~~~~
为啥把(function(){})()去掉,setTimeout("fn1()",2000);可以用
加上就要 在里面再包一个function?


王集鹄 2012-03-13
  • 打赏
  • 举报
回复
(function(){
var fn1 = function(){
console.log("fn1")
setTimeout(function(){ fn1(); }, 2000);
},
fn2 = function(){
console.log("fn2")
setTimeout(function(){ fn1(); }, 2000);
}
fn2();
})()

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧