在以下情况下,setTimeOut的关闭是如何形成的

时间:2018-10-20 09:13:10

标签: javascript closures

关闭是在我们可以到达该代码时形成的,因此不会被垃圾收集。说了

function outer(){
  var name = "ankit";
    function inner(){
         ...
    }
  return inner
}

现在要为上述情况形成一个闭包,我们必须存储inner的引用,这样就不会垃圾回收该外部的特定执行的执行上下文,并且有一个闭包。

类似的东西:

let closure = outer(); // name can be accessed 

现在,我对于setTimeout的这个示例感到困惑

for(var i=0;i<10;i++){
  timeer(i)
}
timer(i){
 setTimeOut((i) => {console.log(i)}, i*1000);
}

//打印0 1 2 3 4 5 6 ...

现在上面的代码是如何工作的,我知道setTimeOut创建了一个隐式闭包,但是我们不存储setTimeOut声明的引用,因此应该对特定我的计时器执行的执行范围进行垃圾收集? 请帮助我理解此用例。 javascript环境是否隐式存储引用setTimeOut?

0 个答案:

没有答案