Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
280 views
in Technique[技术] by (71.8m points)

关于JS的 闭包,想问个问题

  function f1(){
      var result=[];
      for(var i=0;i<10;i++){
          result[i]=function(){
              return i
          }
      }
      return result
  }
  console.log(  f1()[0]()  )  
  console.log(  f1()[1]()  )

结果都是10,我的理解是这样的:
调用f1()[0]()是先执行第一个小括号f1(),此时result[0],result[1]..的值都是一个函数而未赋具体的值,也就是下边这代码并未执行

      return i

,尽管此时的i是0,1,2,3...;f1()执行完后i的值变成了10;而执行到第二个小括号f1()[0]()时,

      return i

这段代码才真正的起作用,但此时i变成了10

问一下我的理解对吗


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

闭包是一个绑定执行环境的函数,执行环境中i经过for循环变成10了,后面执行函数的时候,读到的值就是10


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...