美文网首页
JS 闭包(Closure)

JS 闭包(Closure)

作者: Klart | 来源:发表于2018-09-17 10:27 被阅读109次

    参考阮一峰老师的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
    这样就是一个闭包;
    闭包的作用就是暴露局部变量;
    

    芳芳理解闭包
    闭包

    相关文章

      网友评论

          本文标题:JS 闭包(Closure)

          本文链接:https://www.haomeiwen.com/subject/nyztnftx.html