要理解闭包,首先理解javascript特殊的变量作用域,变量的作用域无非就是两种: 全局变量
局部变量

javascript语言的特殊处就是函数内部可以读取全局变量。

1.如何从外部读取局部变量

我们有时候需要得到函数内的局部变量,但是在正常情况下,这是不能读取到的,只有通过变通方法才能读取到。

在javascript语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成“定义在一个函数内部的函数”。所以本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。

2.闭包的概念

闭包是指有权访问另一个函数作用域中变量的函数,创建闭包的最常见的方式就是在一个函数内创建另一个函数,通过另一个函数访问这个函数的局部变量,利用闭包可以突破作用链域,将函数内部的变量和方法传递到外部。

3.闭包的特性

1).函数嵌套函数

2).内部函数可以引用外层的参数和变量

3).参数和变量不会被垃圾回收机制回收

4.闭包的用途

1).闭包可以读取函数内部的变量

2).可以让变量的值始终保持在内存中,生命周期比较长

5.闭包的缺点

闭包不能滥用,否则会导致内存泄露,影响网页的性能。闭包使用完了后,要立即释放资源,将引用变量指向null。

举个小例子大家看一下

<script>function demo() {var a = 1;return function(b) {return (a++) + b;}}var b = demo()(1);console.log(b);
</script>
复制代码

上述例子中:demo函数中的变量a,在下面匿名函数中是可以读取的,所以console.log(b),打印出来的值是2。

转载于:https://juejin.im/post/5b4feedb5188251aae3297ff

JavaScript闭包函数的理解与使用相关推荐

  1. javascript匿名函数的理解

    复制粘贴 [color=red]点评:请记住,关键点是理解javascript的函数概念(参考w3cshool对函数的描述,搜索关键字:ECMAScript 函数).以及()的运算的理解. 比如:va ...

  2. JavaScript闭包函数与闭包释放

    作用域链:一般,变量取值是到创建这个变量的函数的作用域中取值,如果没有查到,就会往上查找,直到找到全局作用域,这个查找的形成为作用域链. Javascript闭包函数:闭包就是能够读取其它函数内部变量 ...

  3. JavaScript闭包函数

    JavaScript闭包函数 1 概述 2 词法作用域 3 闭包 1 概述 一个函数和对其周围状态(词法环境)的引用捆绑在一起(或者说函数被引用包围),这样的组合就是闭包(closure).也就是说, ...

  4. JavaScript闭包函数理解

    JavaScript闭包 一.变量的作用域: 要理解闭包,首先必须理解JavaScript特殊的变量作用域.      变量作用域无非就是两种:全局变量 和 局部变量.       JavaScrip ...

  5. javascript 匿名函数的理解

    代码如下: (function(){ //这里忽略jQuery所有实现 })(); (function(){ //这里忽略jQuery所有实现 })(); 半年前初次接触jQuery的时候,我也像其他 ...

  6. 对JAVASCRIPT匿名函数的理解

    网上很多解释,我无法理解,我想知道原理...这篇文章应该可以透彻一点 Query片段: view plaincopy to clipboardprint? (function(){ //这里忽略jQu ...

  7. 对javascript匿名函数的理解(透彻版)

    Query片段: view plain copy to clipboard print ? (function(){ //这里忽略jQuery所有实现 })(); 半年前初次接触jQuery的时候,我 ...

  8. JavaScript闭包函数详解

    目录 闭包函数 变量作用域 闭包的概念 闭包的用途 闭包的缺点 闭包函数 变量作用域 要理解JavaScript闭包,就要先理解JavaScript的变量作用域. 变量的作用域有两种:全局的和局部的( ...

  9. JavaScript闭包的个人理解

    闭包指的就是内部函数可以访问外部函数的作用域,也就是通过一个函数的子函数来访问这个函数作用域下的变量. 我们可以看一下下面的函数 function Closure() {var number = 99 ...

最新文章

  1. 任务二:1、选择器 2、连接集中状态的顺序 3、浮动的用发和原理 4、盒模型在IE和Google等不同浏览器的区别与联系...
  2. 可执行jar包的MANIFEST.MF
  3. opencv python教程简书_Python-OpenCV —— 基本操作一网打尽
  4. android游戏编程之从零开始_纯C语言程序员写的编程新手入门基础小游戏之最炫酷推箱子...
  5. XXE漏洞原理/防御
  6. 测试面试题集-Python花式打印九九乘法口诀表
  7. hadoopshpython_让python在hadoop上跑起来
  8. PHP执行linux系统命令
  9. 浅谈压缩感知(二十二):压缩感知重构算法之正则化正交匹配追踪(ROMP)
  10. 白话java_白话Java
  11. C/C++[codeup 2044]神奇的口袋
  12. 腾讯T4级架构师用21个项目带你吃透379页深度学习TensorFlow实践pdf
  13. Win7笔记本开启WiFi
  14. 利用百度文库实现精准引流
  15. 电子入门基础知识之:多路选择开关(MUX)
  16. 论文中的图目录与表目录
  17. python,根据tkinter计数器案例,写了个倒计时器
  18. RCNN,Fast RCNN, Faster RCN解析
  19. 百度地图之鼠标绘制工具条库(开源库)
  20. 勒索软件攻击为何越来越多?

热门文章

  1. python通过connect对象连接数据库对吗_Python连接数据库学习之DB-API详解
  2. html h1转换为行内,css中转换为行内样式的解决方案(css-inline)
  3. 基于threejs的商场楼层展示导航系统源码_便民措施再升级就诊无需问路!我院“智能导航系统”正式上线啦!...
  4. android 蓝牙耳机 sco,使用Android识别器内置蓝牙耳机
  5. lambda 对象去重_最火的java8新特性:Lambda 表达式
  6. java 类一定要声明成public_类和对象练习题
  7. c语言编写动画屏保源码,发个C代码(简单动画演示)
  8. mysql导出数据字典6_MySQL利用Navicat导出数据字典
  9. 中间显示内容_在Excel表格中,你知道编辑栏吗?可以编辑公式和录入内容
  10. mysql 优化设计库_数据库优化设计与SQL优化