zoukankan      html  css  js  c++  java
  • 对Javascript闭包的理解0.1

    声明全局变量i和局部变量j:

    var i = 0;
    
    function foo(){
      i+=1;
      var j = 0;
       j+=1;
      console.log('j='+j); } foo();
    //foo(); console.log('i='+i);

    在函数中声明全局变量i和局部变量j:

    function foo(){
      i = 0;//函数中的i由于没有声明,将提升为全局变量
      i+=1;
       var j = 0;
       j+=1;
      console.log('j='+j); } foo();
    //foo(); console.log('i='+i);

    当我们先注释掉第二个foo();执行这两段代码,会在控制台打印j=1;i=1,当去掉注释再次执行,我们发现打印台结果为j=1;j=1;i=2。由此说明全局变量i在被调用后并没有被gc垃圾处理程序回收,而局部变量j在每一次被调用后都被回收,下一次再被重新声明赋值再回收销毁。而闭包所达到的其中一个效果就是让局部变量被调用后可以不被回收,甚至从某种程度来说可以把局部变量拿到全局来使用(其实可以参考下java中一个Object,里面有private私有属性,需要在外面拿到这个私有属性需要public的get方法,而现在就是需要在JS中写一个这样的get方法)。

    最后的效果:

    var foo = (function(){
          var i = 0; 
          return function(){//相当于get方法
                return i+=1;
          }    
    })(); 
    
    foo();
    foo(); 
  • 相关阅读:
    python 登录与注册
    python 深浅拷贝
    列表|字典|集合推导式
    正则表达式——笔记
    Python thread
    allure报告自定义logo和名称
    回归测试用例编写思路
    测试用例规范【如何编写测试用例】
    git与pycharm的使用详解(git+gitlab+pycham)
    接口自动化
  • 原文地址:https://www.cnblogs.com/mesopotamiazZ/p/6872811.html
Copyright © 2011-2022 走看看