js 闭包

概念:有权访问两一个函数作用域中的变量的函数--->能够读取其他函数内部变量的函数

function demo () {
    var top = '';
    function c() {
        xxx.innerHTML = top;
    }
}

闭包在工作中的使用:

1、封装私有变量:(amd框架在使用)

(function () {
      var Person = function() {
        this.money = 100000000;
      }
      Person.prototype.buy = function () {
        this.money -= 100;
        console.log('left money ' + this.money + ' <br />');
      }

      let xiaoming = new Person();
      xiaoming.buy();

      // 这个时候,如果有个函数改变了xiaomign的money值,那么money就是外面可以访问的
      // 相当于一个对象它的属性外部可以去改
      function xiaomingWifeSearch() {
        xiaoming.money = 0;
      }
      xiaomingWifeSearch();
      xiaoming.buy();

    })();

上面的问题可以用闭包来解决:

(function () {
      var Person = (
        function (params) {
          var _money = 100000000;
          function Person() {
            // 这里放公有的变量
          }
          Person.prototype.buy = function () {
            _money -= 100;
            console.log('left money ' + _money + ' <br />');
          }
          return Person;
        }
      )()

      let xiaoming = new Person();
      xiaoming.buy();

      // 这个时候,如果有个函数改变了xiaomign的money值,那么money就是外面可以访问的
      // 相当于一个对象它的属性外部可以去改
      function xiaomingWifeSearch() {
        xiaoming.money = 0;
      }
      xiaomingWifeSearch();
      xiaoming.buy();

    })();

但是上面的代码依然存在问题:比如

(function () {
      var Person = (
        function (name) {
          var _money = 100000000;
          function Person(name) {
            // 这里放公有的变量
            this.name = name
          }
          Person.prototype.buy = function () {
            _money -= 100;
            console.log(this.name + 'left money ' + _money + ' <br />');
          }
          return Person;
        }
      )()

      let xiaoming = new Person('xiaoming');
      xiaoming.buy();
      let xiaohong = new Person('xiaohong');
      xiaohong.buy();

    })();

所有对象公共一个属性,var _money = 100000000; // ==> 静态私有变量

2、存储变量:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值