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

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

当一个函数被调用时,会创建一个执行环境及相应的作用域链。然后使用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));

js闭包理解与使用场景的更多相关文章

  1. js闭包理解实例小结

    Js闭包 闭包前要了解的知识  1. 函数作用域 (1).Js语言特殊之处在于函数内部可以直接读取全局变量 <script type="text/javascript"> ...

  2. js闭包理解

    js闭包的作用是使函数外可以访问函数内部的变量,是通过 在函数内部 定义 访问函数内变量 的函数实现的,内部的一个函数产生一个闭包 function a() { var i=0; return fun ...

  3. 理解js闭包9大使用场景

    1.返回值(最常用) //1.返回值 最常用的 function fn(){ var name="hello"; return function(){ return name; } ...

  4. javascript之闭包理解以及应用场景

    半个月没写博文了,最近一直在弄小程序,感觉也没啥好写的. 之前读了js权威指南,也写了篇博文,但是实话实说当初看闭包确实还是一头雾水.现在时隔一个多月(当然这一段时间还是一直有在看闭包的相关知识)理解 ...

  5. js闭包理解案例-解决for循环为元素注册事件的问题

      转发自http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html       一.变量的作用域 要理解闭包,首 ...

  6. JS闭包理解_摘

    原文地址1:http://www.cnblogs.com/mzwr1982/archive/2012/05/20/2509295.html 闭包是一个比较抽象的概念,尤其是对js新手来说.书上的解释实 ...

  7. JS闭包,以及适用场景

    闭包的定义 不用解释了,网上到处都是.简单的说:一个定义在函数内部的函数与包含它的外部函数构成了闭包,内部函数可以访问外部函数的变量,这些变量将一直保存在内存中,直到无法再引用这个内部函数 举个例子: ...

  8. js 闭包 理解 copy

    闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现. 下面就是我的学习笔记,对于Javascript初学者应该是很有用的. 一.变量的作用域 要理解 ...

  9. js 闭包 理解

    1.什么是闭包 定义:是指有权访问另一个函数作用域中的变量的函数 创建闭包:在一个函数内部创建另一个函数 基本特点 在返回的匿名函数中 可以调用外部函数的变量 如下例中所示 内部函数(匿名函数) 可以 ...

随机推荐

  1. 关于App收集个人信息基本规范,这里公开征求你的意见!

    关于App收集个人信息基本规范,这里公开征求你的意见! https://www.thepaper.cn/newsDetail_forward_4122573 以后国家开始规范App收集个信息基本规范, ...

  2. windbg排查线上线程数爆炸问题

    1.早上发现有个job的线程数一直居高不下 2.于是dump一个文件拉到本地,查到都在执行 StartInner方法 3.查询代码,此方法是个静态类开启线程的地方,理论上没有任何问题 4.思索了半天, ...

  3. 网络基础-------------给电脑设置IP

    ip 是每一台电脑进入互联网的一个必备钥匙,没有它就不能体会冲浪的乐趣,当我们使用电脑连接无线时我们就会被自动分配一个ip地址(DHCP),这样我们就可以凭借这个IPV4地址来进行冲浪了,但是自动分配 ...

  4. 一次性删除master数据库中的所有用户添加的表

    执行查询命令 use master; go sp_msforeachtable @command1="drop table ?" go

  5. navicat2059错误的解决

    1.输入mysql -uroot -p登陆mysql 2.登录成功以后使用ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD ...

  6. Vue开发日志

    一 搭建环境 mac 安装node brew install node 安装vue 全家桶 npm install -g vue-cli 选择一个目录做初始化 vue init webpack myp ...

  7. 【知识点】SPU&SKU

    SPU:标准化产品单元 SPU = Standard Product Unit (标准化产品单元),SPU是商品信息聚合的最小单位,是一组可复用.易检索的标准化信息的集合,该集合描述了一个产品的特性. ...

  8. 详解Vue中的虚拟DOM

    摘要: 什么是虚拟DOM? 作者:浪里行舟 Fundebug经授权转载,版权归原作者所有. 前言 Vue.js 2.0引入Virtual DOM,比Vue.js 1.0的初始渲染速度提升了2-4倍,并 ...

  9. CTF-代码审计(1)——parse_str()变量覆盖

    题目连接:http://222.18.158.226:7000/iscc.php 考点:parse_str()变量覆盖 代码: PHP知识点: 1.parse_url() 参照网址:https://w ...

  10. testNG结果入库

    一.使用IReporter接口 https://blog.csdn.net/oqqJohn1234567890/article/details/80900511  此文章中将结果数据打印成文本.