JS对象变量、闭包的一些问题

https://www.cnblogs.com/ivehd/p/vo_ao.html

为什么会有预解析,

其实是因为函数在被调用的时候,还没有被执行,会先创建对象变量

 

对象变量里面存了什么呢?

 

然后对象变量又会放到作用域链上,所以,函数开始执行的时候,会去作用域上找,最先找的就是自己的对象变量。

所以如果内部用同名的变量,那么肯定是获取到undefined的那个值了。

 

至于之前的那个代码

for(var i=0;i<4;i++){
  setTimeout(function(i) {
    console.log(i);
  }(i),1000);
}

setTimeout要传的是一个函数,

这里

function(i) {
    console.log(i);
  }(i)

已经是函数的执行了,所以在传入setTimeout的时候,该函数已经执行了,所以当然是0 1 2 3啦!

根本都没有延迟!

 

所以这和闭包没有关系。

 

posted @ 2018-09-25 19:18  朋友圈  阅读(147)  评论(0编辑  收藏  举报