闭包:函数嵌套函数。

说到闭包,就不得不说作用域作用域链。

作用域:变量的适用范围。

作用域链:如果要查找一个变量,它会一层一层的往上找,找到就返回,找不到继续向上找,如果没找到就返回undefined.

闭包:函数嵌套一个函数    或者说     函数返回一个函数 ;
在外层可以访问内层的作用域(外部的函数可以访问内部的变量)   这就是闭包.

function fn1() {var age = 10;debuggerreturn function fn2() {return age;}
}console.log(fn1()());           // 10

 作用域:
        var msg = '你今天快乐吗?';
         console.log(msg); */           // 你今天快乐吗?

作用域链:
         作用域的运行机制:        采用就近原则机制

它会找到最近的变量,如果找不到,就往上一层找,
         如果还找不到,继续向上一层找,直到浏览器给我们报错.        // a is not defined
         
         当我们在局部作用域中,访问一个变量时,系统首先会在当前作用域中寻找变量var的声明语句,
         如找到则直接使用.反之,则继续向上一级作用域中寻找var的声明语句,
         如找到则直接使用,反之,继续向上一级作用域中去寻找…直到全局作用域,
         最后找不到的话就会给我们一个报错。

作用域链代码演示:

尝试注释掉每一个变量a

var a = '小强';
        function fn1() {
            var a = '小明';
            console.log(a);
                    function fn2() {
                        var a = '小白';
                        console.log(a);
                    }
                 fn2();
         }
        fn1();

最后总结一下哈:闭包的好处和它的一个坏处:

好处:它不仅可以访问内部的变量,变量不会污染;

坏处:当前变量会一直保存,容易造成内存泄漏

举个例子吧,咱们vue里面中的data就是一个闭包:

data:function(){}

data作为一个函数,可以保证数据不会污染

什么是闭包?什么是作用域?什么是作用域链?相关推荐

  1. 深入理解javascript原型和闭包(12)——简介【作用域】

    提到作用域,有一句话大家(有js开发经验者)可能比较熟悉:"javascript没有块级作用域".所谓"块",就是大括号"{}"中间的语句. ...

  2. 一文搞懂:词法作用域、动态作用域、回调函数、闭包

    把以前一直只限于知道,却不清晰理解的这几个概念完完整整地梳理了一番.内容参考自wiki页面,然后加上自己一些理解. 词法作用域和动态作用域 不管什么语言,我们总要学习作用域(或生命周期)的概念,比如常 ...

  3. python函数作用域与闭包_python函数名称空间与作用域、闭包

    一.命名空间概念 1.命名空间(name space) 名称空间是存放名字的地方. 若变量x=1,1存放在内存中,命名空间是存放名字x.x与1绑定关系的地方. 2.名称空间加载顺序 python te ...

  4. html中的声明的作用域,Html/CSS 作用域

    作用域是什么: 有效的范围 1.ES5 中作用域 在ES5中只有函数有作用域,其他没有作用域的概念.所以当在使用的时候需要使用闭包的方式给变量加上作用域,用以防止其他地方对变量的改动从而影响执行效果. ...

  5. python作用域,变量作用域

    变量作用域 一个程序的所有变量并不是在哪个位置都可以访问的.访问权限取决于这个变量是在哪里赋值的. 变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称. 如下为两种最基本的变量的作用域: 全局 ...

  6. 词法作用域和动态作用域

    JavaScript采用的是词法作用域 1.词法作用域 即函数定义时,即确定的作用域.js中的作用域链,在函数声明时候,就已经确定了,无论函数在何处调用,其作用域变量的查找都是按照定义是包含关系去查找 ...

  7. JavaScript之词法作用域和动态作用域

    作用域 作用域是指程序源代码中定义变量的区域. 作用域规定了如何查找变量,也就是确定当前执行代码对变量的访问权限. JavaScript 采用词法作用域(lexical scoping),也就是静态作 ...

  8. JavaScript基础08-day10【函数的返回值、实参、立即执行函数、方法、全局作用域、函数作用域、提前声明、this、工厂方法创建对象、构造函数】

    学习地址: 谷粒学院--尚硅谷 哔哩哔哩网站--尚硅谷最新版JavaScript基础全套教程完整版(140集实战教学,JS从入门到精通) JavaScript基础.高级学习笔记汇总表[尚硅谷最新版Ja ...

  9. 16-作用域(全局作用域及局部作用域)

    16-作用域(全局作用域及局部作用域) //作用域 全局作用域 函数作用域 //函数的内部环境可以访问到所有外部环境的值,但是外部环境不能访问内部环境的值 //注意事项 //在全局变量和局部变量不同名 ...

  10. bpmn文件的标签为何都以bpmn2开头_C语言之两种作用域:函数的作用域与文件作用域...

    作用域描述程序中可访问标识符的区域.一个C变量的作用域可以是块作用域.函数作用域.函数原型作用域或文件作用域. 其中,块是用一对花括号括起来的代码区域.例如,整个函数体是一个块,函数中的任意复合语句也 ...

最新文章

  1. 人工智能算法的可解释性方法研究
  2. linux deepin/ubuntu 搭nginx文件服务器配置
  3. 证明kruskal算法求解图的最小生成树具有贪心选择性质_将并查集应用在图论中的最小生成树算法——Kruskal...
  4. Git 添加和提交组合命令
  5. 小汤学编程之JAVA基础day02——数据类型、Scanner类的使用
  6. 腾讯开源开年红!TencentOS 内核正式开源
  7. NS3网络仿真(6): 总线型网络
  8. Sqlserver表数据误删除后的恢复
  9. EasyUI 通过 Combobox 实现 AutoComplete 效果
  10. [转贴]搜索引擎优化(SEO)菜鸟版@搜索引擎研究专案
  11. 【软件推荐】电脑控制手机软件Scrcpy
  12. 计算机操作系统知识点总结(有这一篇就够了!!!)
  13. ArcGIS中通过JPG图片文件提取矢量要素
  14. 认知系列1:认知是什么
  15. openvino踩坑记(ImportError: DLL load failed while importing ie_api)
  16. 转载《2020年校招面经心得》
  17. 电池SOC估计-EKF UKF
  18. Codeforces ~ 1009C ~ Annoying Present (贪心)
  19. 计算机图像处理2000字论文,图像处理计算机技术论文
  20. GEANT4的B4a例子要点

热门文章

  1. 倩女幽魂 易语言模块 - 附: 自动打怪吃药 辅助 外挂,永不过期!【已有新版】
  2. [BZOJ1691][Usaco2007 Dec]挑剔的美食家(贪心+splay)
  3. 使用console.time打印代码运行时间
  4. python编程从入门到实践(入门)
  5. 计算机怎么管理自启,电脑如何设置开机启动项
  6. 2022 蓝桥杯C语言B组
  7. linux代码行数统计工具,统计代码行数工具 用golang实现
  8. u盘启动识别不到服务器硬盘,u盘启动读不了硬盘,教您U盘装系统找不到硬盘解决方法...
  9. python天气查询运行过程_菜鸟玩Python|制作天气查询软件
  10. java catch抛出异常_java异常——捕获异常+再次抛出异常与异常链