为了账号安全,请及时绑定邮箱和手机立即绑定

关于立即执行函数与闭包的问题

关于立即执行函数与闭包的问题

噜噜哒 2019-03-07 14:15:45
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 所以理论上这时候并不会往异步队列中丢进去要执行的异步动作 这时候并不会产生闭包 因为没有对于立即执行函数的引用 但是我看有一些文章说这里也是因为闭包 请问我的理解思路那里出问题了吗 谢谢
查看完整描述

3 回答

?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

第一个例子函数都已经执行完了,不会产生闭包的


查看完整回答
反对 回复 2019-04-01
?
喵喵时光机

TA贡献1846条经验 获得超7个赞

你用IIFE……setTimeout第一个参数是undefined了


查看完整回答
反对 回复 2019-04-01
?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

你好,第二个函数结果是延迟1秒按顺序打印出0-9吧


查看完整回答
反对 回复 2019-04-01
  • 3 回答
  • 0 关注
  • 446 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信