要理解闭包首先要知道什么是函数的作用域链

因为有函数的作用域链存在,所以函数无论在哪里调用,函数都可以使用函数外部作用域的变量。

当一个函数被调用时,会创建一个执行环境及相应的作用域链。然后使用arguments和其他命名参数的值来初始化函数的活动对象。此活动对象在当前函数作用域链的第一位,外部函数的活动对象在作用域链的第二位,外部函数的外部函数的活动对象在第三位,直至作为作用域链终点的全局执行环境。

闭包的作用:

实现一个作用域,达到封装的目的,这样做的好处是隐藏私有变量,防止污染全局变量;

还可以实现缓存功能

        案例1:隐藏私有变量

         function pack() {

             var index;

             return function () {

                 return index++;

             };

         }

         var p = pack();

         p();

         案例2:缓存

         function createFab(n) {
var _cache = {};
return function (n) {
var result = 0;
if (_cache[n]) {
return _cache[n];
}
if (n === 1 || n === 2) {
result = 1;
}
else {
result = fab(n - 1) + fab(n - 2);
}
_cache[n] = result;
return result;
}
} var fab = createFab();
console.info(fab(6));
console.info(fab(6));

最新文章

  1. Lua学习笔记一
  2. java12 - 7 排序的案例
  3. Github排行榜
  4. JAVA定时执行任务的三种方法
  5. Java多线程 - 线程状态
  6. 2015英特尔® 实感™ (Intel® RealSense™) 动手开发实验课
  7. 对React的理解
  8. WCF - net.pipe vs. net.tcp vs. http Bindings
  9. android开发学习笔记:圆角的Button
  10. css样式float造成的浮动“塌陷”问题的解决办法
  11. 基于mapreducer的图算法
  12. django最简单表单入门
  13. STM32F4xx时钟理解
  14. 在vc正在使用xtremetoolkit接口库-----使用简单的控制
  15. redis内存占用说明
  16. 2017.3.3自测j纠错题.
  17. JSP执行过程分析
  18. 【django之admin,单例模式】
  19. Tsinghua 2018 DSA PA3简要题解
  20. 简单配置,让ES6脚本在浏览器里飞

热门文章

  1. Python-lambda使用
  2. Kubernetes 学习(十)Kubernetes 容器持久化存储
  3. No package python-pip available. 解决方法
  4. 【记录】【idea】【mysql】Server returns invalid timezone. Go to 'Advanced' tab and set 'serverTimezone' property manually.解决问题
  5. POJ 1061 青蛙的约会 题解
  6. kubeadm安装kubernetes 1.16.2
  7. centos6.5 安装openresty
  8. Git的使用--如何安装和使用 github,让小白不在那么白 (一)(超详解)
  9. docke通信之Linux 网络命名空间
  10. 大型情感剧集Selenium:6_selenium中的免密登陆与cookie操作【华为云技术分享】