什么是闭包?什么是作用域?什么是作用域链?
闭包:函数嵌套函数。
说到闭包,就不得不说作用域和作用域链。
作用域:变量的适用范围。
作用域链:如果要查找一个变量,它会一层一层的往上找,找到就返回,找不到继续向上找,如果没找到就返回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作为一个函数,可以保证数据不会污染
什么是闭包?什么是作用域?什么是作用域链?相关推荐
- 深入理解javascript原型和闭包(12)——简介【作用域】
提到作用域,有一句话大家(有js开发经验者)可能比较熟悉:"javascript没有块级作用域".所谓"块",就是大括号"{}"中间的语句. ...
- 一文搞懂:词法作用域、动态作用域、回调函数、闭包
把以前一直只限于知道,却不清晰理解的这几个概念完完整整地梳理了一番.内容参考自wiki页面,然后加上自己一些理解. 词法作用域和动态作用域 不管什么语言,我们总要学习作用域(或生命周期)的概念,比如常 ...
- python函数作用域与闭包_python函数名称空间与作用域、闭包
一.命名空间概念 1.命名空间(name space) 名称空间是存放名字的地方. 若变量x=1,1存放在内存中,命名空间是存放名字x.x与1绑定关系的地方. 2.名称空间加载顺序 python te ...
- html中的声明的作用域,Html/CSS 作用域
作用域是什么: 有效的范围 1.ES5 中作用域 在ES5中只有函数有作用域,其他没有作用域的概念.所以当在使用的时候需要使用闭包的方式给变量加上作用域,用以防止其他地方对变量的改动从而影响执行效果. ...
- python作用域,变量作用域
变量作用域 一个程序的所有变量并不是在哪个位置都可以访问的.访问权限取决于这个变量是在哪里赋值的. 变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称. 如下为两种最基本的变量的作用域: 全局 ...
- 词法作用域和动态作用域
JavaScript采用的是词法作用域 1.词法作用域 即函数定义时,即确定的作用域.js中的作用域链,在函数声明时候,就已经确定了,无论函数在何处调用,其作用域变量的查找都是按照定义是包含关系去查找 ...
- JavaScript之词法作用域和动态作用域
作用域 作用域是指程序源代码中定义变量的区域. 作用域规定了如何查找变量,也就是确定当前执行代码对变量的访问权限. JavaScript 采用词法作用域(lexical scoping),也就是静态作 ...
- JavaScript基础08-day10【函数的返回值、实参、立即执行函数、方法、全局作用域、函数作用域、提前声明、this、工厂方法创建对象、构造函数】
学习地址: 谷粒学院--尚硅谷 哔哩哔哩网站--尚硅谷最新版JavaScript基础全套教程完整版(140集实战教学,JS从入门到精通) JavaScript基础.高级学习笔记汇总表[尚硅谷最新版Ja ...
- 16-作用域(全局作用域及局部作用域)
16-作用域(全局作用域及局部作用域) //作用域 全局作用域 函数作用域 //函数的内部环境可以访问到所有外部环境的值,但是外部环境不能访问内部环境的值 //注意事项 //在全局变量和局部变量不同名 ...
- bpmn文件的标签为何都以bpmn2开头_C语言之两种作用域:函数的作用域与文件作用域...
作用域描述程序中可访问标识符的区域.一个C变量的作用域可以是块作用域.函数作用域.函数原型作用域或文件作用域. 其中,块是用一对花括号括起来的代码区域.例如,整个函数体是一个块,函数中的任意复合语句也 ...
最新文章
- 人工智能算法的可解释性方法研究
- linux deepin/ubuntu 搭nginx文件服务器配置
- 证明kruskal算法求解图的最小生成树具有贪心选择性质_将并查集应用在图论中的最小生成树算法——Kruskal...
- Git 添加和提交组合命令
- 小汤学编程之JAVA基础day02——数据类型、Scanner类的使用
- 腾讯开源开年红!TencentOS 内核正式开源
- NS3网络仿真(6): 总线型网络
- Sqlserver表数据误删除后的恢复
- EasyUI 通过 Combobox 实现 AutoComplete 效果
- [转贴]搜索引擎优化(SEO)菜鸟版@搜索引擎研究专案
- 【软件推荐】电脑控制手机软件Scrcpy
- 计算机操作系统知识点总结(有这一篇就够了!!!)
- ArcGIS中通过JPG图片文件提取矢量要素
- 认知系列1:认知是什么
- openvino踩坑记(ImportError: DLL load failed while importing ie_api)
- 转载《2020年校招面经心得》
- 电池SOC估计-EKF UKF
- Codeforces ~ 1009C ~ Annoying Present (贪心)
- 计算机图像处理2000字论文,图像处理计算机技术论文
- GEANT4的B4a例子要点
热门文章
- 倩女幽魂 易语言模块 - 附: 自动打怪吃药 辅助 外挂,永不过期!【已有新版】
- [BZOJ1691][Usaco2007 Dec]挑剔的美食家(贪心+splay)
- 使用console.time打印代码运行时间
- python编程从入门到实践(入门)
- 计算机怎么管理自启,电脑如何设置开机启动项
- 2022 蓝桥杯C语言B组
- linux代码行数统计工具,统计代码行数工具 用golang实现
- u盘启动识别不到服务器硬盘,u盘启动读不了硬盘,教您U盘装系统找不到硬盘解决方法...
- python天气查询运行过程_菜鸟玩Python|制作天气查询软件
- java catch抛出异常_java异常——捕获异常+再次抛出异常与异常链