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);
    }
--------------------- 
原文地址:https://www.cnblogs.com/xiaozhumaopao/p/11115868.html