for(var i=0;i<10;i++){ setTimeout((function(i){ console.log(i); })(i),1000*i); }for(var i=0;i<10;i++){ setTimeout((function(i){ return function(){ console.log(i); } })(i),1000*i); }首先说明我知道这两个函数执行的结构 第一个是马上打印出0到9并没有延迟 第二个函数会延迟1秒按顺序打印出0-9第二个例子我明白是 首先立即执行函数先执行 然后创建了一个函数作用域 把变量i值作为参数保留在这个上下文中 然后这个立即执行函数执行完返回一个匿名函数 这个匿名函数会被丢进异步队列中 循环十次 进入下一个tick 这时候匿名函数处于全局作用域 保留着立即执行函数的执行上下文 所以这时候打印i取得是立即执行上下文的i 我认为我的理解是没问题的问题是第一个例子 我的理解是打印出0到9是因为立即执行函数打印出来的 这时候立即执行函数执行完毕返回underfined 所以理论上这时候并不会往异步队列中丢进去要执行的异步动作 这时候并不会产生闭包 因为没有对于立即执行函数的引用 但是我看有一些文章说这里也是因为闭包 请问我的理解思路那里出问题了吗 谢谢
添加回答
举报
0/150
提交
取消