博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
javascript闭包的作用
阅读量:6335 次
发布时间:2019-06-22

本文共 1127 字,大约阅读时间需要 3 分钟。

hot3.png

闭包的用途

1)缓存:在项目中有些变量的值会在多出用到,如果直接把变量定义成全局变量也能解决问题,但是危险很大,因为可能发生变量重名的问题,这样有可能出现潜在的bug。那么用闭包做一个专门用于存放变量的缓存,就可以解决这个问题。

例子:

//CachedSearchBox就是一个存放变量的工具

var CachedSearchBox = (function(){

   var cache = {};
   count = [];
   return {
    getCache : function(dsid){
     if(dsid in cache) {
      return cache[dsid];
     }
    },
    setCache : function(dsid,data){
     cache[dsid] = data;
    }
   }
  })();
  var a = [1,2,3,4,5];
  CachedSearchBox.setCache('a',a);//可以把变量存放在cache中
  console.info(CachedSearchBox.getCache('a'));//在需要的地方直接拿出来就行

  CachedSearchBox.setCache('a',['a','b','c','d']);

  console.info(CachedSearchBox.getCache('a'));

2)实现封装

闭包的另一个重要用途是实现面向对象中的对象,传统的对象语言都提供类的模板机制,这样不同的对象(类的实例)拥有独立的

成员及状态,互不干涉。虽然JavaScript中没有类这样的机制,但是通过使用闭包,我们可以模拟出这样的机制。

function Person(){

        var name = "default";

        return {

                getName : function(){

                    return name;

                },

                setName : function(newName){

                    name = newName;

                }

        }

};

var john = Person();

console.info(john.getName());

john.setName("john");

console.info(john.getName());

var jack = Person();

console.info(jack.getName());

jack.setName("jack");

console.info(jack.getName());

运行结果如下:

default

john

default

jack

 

 

 

 

 

转载于:https://my.oschina.net/crazybird/blog/265269

你可能感兴趣的文章
linux bunzip2命令
查看>>
敏捷个人:通过实践TOGAF来思考如何学习并应用新的方法?
查看>>
Android系统的开机画面显示过程分析(6)
查看>>
vivo Hi-Fi+QQ音乐 数字音乐市场的一剂良方
查看>>
Cocos2d-x 3.2 异步动态加载 -- 保卫萝卜开发总结
查看>>
聚焦触宝反侵权事件:中国创业者用什么护航海外市场大门
查看>>
AOP技术基础
查看>>
Android系统进程间通信(IPC)机制Binder中的Server启动过程源代码分析(2)
查看>>
无线802.11n 2.4G与5G性能测试
查看>>
子域名信息收集攻略
查看>>
[Android]开发数独游戏思路分析过程
查看>>
SpreadJS 类Excel表格控件 - V12 新特性详解
查看>>
理解并取证:IPv6与IPv4在报文结构上的区别
查看>>
EOS主网上线只是开始,如何运营决定未来
查看>>
不用Visual Studio,5分钟轻松实现一张报表
查看>>
(译)如何使用cocos2d和box2d来制作一个Breakout游戏:第一部分
查看>>
计算机图形学(一) 图形系统综述
查看>>
持续集成(CI)- 几种测试的区别(摘录)
查看>>
多用户虚拟Web3D环境Deep MatrixIP9 1.04发布
查看>>
求高手,求解释
查看>>