zoukankan      html  css  js  c++  java
  • JS闭包解析

    参考文章  :    深入理解JS闭包

    正常来说,函数内定义的变量是私有变量,函数外部无法获取,但是闭包是指有权访问另一个函数作用域中的变量的函数。

    function aa(){
        var name = 'lihua';
        return function bb(){
            return name;
        }
    }
    
    function bb(){
        var cc = aa();
        console.log(cc());
    }
    bb();
    
    ----
    function f1(){
      var n=999;
      nAdd=function(){n+=1} //没有定义 var 是全部变量
      function f2(){
       alert(n);
      }
      return f2;
    }
    
    var result=f1();
    result(); // 999
    nAdd();
    result();
    
    -----
    //闭包可以用在许多地方。它的最大用处有两个,一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。
    function f1(){
      var n=999;
      function nAdd(){
          n+=1;
          console.log(n);
        } 
      return nAdd;
    }
    
    var result=f1();
    result(); //1000
    result(); //1001
    result(); //1002
    
    ==========
    var name = "The Window";
      var object = {
        name : "My Object",
        getNameFunc : function(){
          return function(){
            return this.name;
          };
    
        }
    
      };
    console.log(object.getNameFunc()());
    ------
    var name = "The Window";
    var object = {
        name : "My Object",
        getNameFunc : function(){
          var that = this;
          return function(){
            return that.name;
          };
        }
    };
    alert(object.getNameFunc()());
    ===========
    var sum =10
    function add() {
        var sum = 0;
        function operation() {
            return sum = sum ? sum + 1 : 1;
        }
        return operation
    }
    var a = add();
    console.log(a());
    console.log(a());//2
    console.log(a());//3
    console.log(a());//4
    a = null; //
    a = add();
    console.log(a());//1
    ---------------------

    深入理解JS闭包 [https://blog.csdn.net/cauchy6317/article/details/81167572]

    链接:https://www.nowcoder.com/questionTerminal/da4115e308c948169a9a73e50d09a3e7

    现有如下html结构
    <ul>
     <li>click me</li>
     <li>click me</li>
     <li>click me</li>
     <li>click me</li>
    </ul>
    运行如下代码:
    var elements=document.getElementsByTagName('li');
        var length=elements.length;
        for(var i=0;i<length;i++){
            elements[i].onclick=function(){
            alert(i);
        }
    
     }
    依次点击4个li标签,哪一个选项是正确的运行结果()?
    依次弹出1,2,3,4
    依次弹出0,1,2,3
    依次弹出3,3,3,3
    依次弹出4,4,4,4
    
    var elements=document.getElementsByTagName('li');
        var length=elements.length;
        for(var i=0;i<length;i++){
            elements[i].onclick=function(num){
            return function() {
                 alert(num);
            };
        }(i);
        }
    --------------------- 
  • 相关阅读:
    尚观寻求帮助
    linux软链接与硬连接
    linux常用命令(三)
    zend 动作控制器
    zend 路由
    ZF组件功能简介
    zend_controller
    linux常用命令(一)
    练习1
    练习1感受:
  • 原文地址:https://www.cnblogs.com/xiaozhumaopao/p/11115868.html
Copyright © 2011-2022 走看看