JS 闭包(Closure)

参考阮一峰老师的JS 闭包

理解闭包前需要理解变量作用域、变量提升

JS作用域

先来看一下一道题目
<ul>
  <li>选项1</li>
  <li>选项2</li>
  <li>选项3</li>
  <li>选项4</li>
  <li>选项5</li>
  <li>选项6</li>
</ul>
/变量提升了,var item;var i;/

var item =document.querySelectorAll('li')

for (var i=0;i<item.length;i++){
  items[i].onclick=function(){
  console.log(i);
}
}

点击li依次打印出来什么?
答案:每次打印都是6
原因:变量提升了;i是全局变量;

那如何让它依次打印,12345呢;

因为i是全局变量,所以首先需要把i变为局部变量;
for (var i=0;i<item.length;i++){
  var temp=function(j){
   items[j].onclick=function(){
    console.log(j);
}
}
temp(i)
}
这样打印的话就是依次打印123456

现在来说说闭包:

  function f1(){

    var n=999;

    function f2(){
      alert(n); 
    }

    return f2;

  }

  var result=f1();

  result(); // 999
这样就是一个闭包;
闭包的作用就是暴露局部变量;

芳芳理解闭包
闭包

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容