闭包相关整理

闭包是什么?

闭包就是一个把函数内部和外部连接起来的桥梁

简单说就是访问函数作用域中的变量的函数

闭包怎么做到的?

函数内部定义的变量是局部的 当局部变量所在的函数被调用的时候  开始执行

调用执行一旦结束 局部变量就会被释放

闭包延长局部变量的执行时间 当函数执行完毕以后 局部变量不可以被内存释放 然后让外部可以访问到这个变量

闭包的特点是什么?

1.函数套函数,闭包一定有嵌套函数

2.外层函数一定有局部变量,且内层函数一定操作了外层函数的这个变量

3.内层函数会使用return返回外部(如果不返回这个内层函数,你就没办法使用这个闭包,返回内层函数的最终的目的就是让外部可以访问到这个闭包)

闭包的示例

比如一个函数 他有局部作用域  我们应该如何拿到里面的值?

function init() {

      var name = '123';

      function displayName() {

        return name

      }

      return displayName()

    }

    var a = init()

    console.log(a);

 这只是个闭包的简单例子

闭包还可以封装存储私有变量

 // 封装私有变量

    var person = function () {

      //变量作用域为函数内部,外部无法访问

      var name = "default";

      return {

        getName: function () {

          return name;

        },

        setName: function (newName) {

          name = newName;

        }

      }

    }();

    console.log(person);

    console.log(person.name);;//直接访问,结果为undefined

    console.log(person.getName()); // default);

    person.setName("abruzzi");

    console.log(person.getName()); // abruzzi

闭包的作用还有保留之前的词法环境 不让变量被释放

function makeAdder(x) {

      return function (y) {

        return x + y

      }

    }

    var add5 = makeAdder(5)

    var add10 = makeAdder(10)

    console.log(add5(2)); // 7

并且闭包都是引用自己词法作用域的内的变量

在一个闭包内对变量的修改 不会影响到另外一个闭包中的变量

var makeCounter = function () {

      var privateCounter = 0;

      function changeBy(val) {

        privateCounter += val;

      }

      return {

        increment: function () {

          changeBy(1);

        },

        decrement: function () {

          changeBy(-1);

        },

        value: function () {

          return privateCounter;

        },

      };

    };

    var Counter1 = makeCounter();

    var Counter2 = makeCounter();

    console.log(Counter1.value()); /* logs 0 */

    Counter1.increment();

    Counter1.increment();

    console.log(Counter1.value()); /* logs 2 */

    Counter1.decrement();

    console.log(Counter1.value()); /* logs 1 */

    console.log(Counter2.value()); /* logs 0 */

闭包实例  体会存储词法环境

 

 

 

  Document

  12

  14

  16

 

整理的闭包相关知识若能帮到大家微末 我将不胜荣幸 

若有相关指正 请不吝赐教

你可能感兴趣的:(java,开发语言)