javascript进阶课程--第三章--匿名函数和闭包

一、总结

二、学习要点

  • 掌握匿名函数和闭包的应用

三、匿名函数和闭包

匿名函数

没有函数名字的函数

  1. 单独的匿名函数是无法运行和调用的
  2. 可以把匿名函数赋值给变量
  3. 通过表达式自我执行,语法:(匿名函数)()
  4. 匿名函数传递参数,语法:(匿名函数)(参数)

闭包 闭包的相关概念

  • 闭包的英文单词是closure,是指有权访问另一个函数作用域中变量的函数。
  • 在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。内层的函数可以使用外层函数的所有变量,即使外层函数已经执行完毕。
  • 这是JavaScript中非常重要的一部分知识,因为使用闭包可以大大减少我们的代码量,使我们的代码看上去更加清晰等等,总之功能十分强大。

注:这些概念了解即可,接下来我们将通过实例来进行了解。

闭包的相关知识点

  1. 常见的方式是在函数内部创建另一个函数
  2. 闭包的第一个用途:通过闭包可以访问局部变量
  3. 闭包的第二个用途:可以让局部变量的值始终保持在内存中
    • 优点:可以把局部变量驻留在内存中,可以避免使用全局变量;

      全局变量在复杂程序中会造成许多麻烦(比如命名冲突,垃圾回收等),所以推荐使用私有的,封装的局部变量。而闭包可以实现这一点。

    • 缺点:由于闭包里作用域返回的局部变量资源不会被立刻销毁回收,所以可能会占用更多的内存;所以过度使用闭包会导致性能下降;
  4. 循环函数中的匿名函数和闭包问题

闭包中的this问题

  • 之前的课程中讲过this是在运行时基于函数的执行环境来绑定的
  • 全局函数中的this是window,而当函数作为某个对象的方法调用时,this就是指的那个对象......
  • 匿名函数的执行环境具有全局性,this通常是指向window的。
    • 可以使用对象冒充强制改变this的指向
    • 将this赋值给一个变量,闭包访问这个变量

模仿块级作用域

块级作用域又叫私有作用域,但是JS没有块级作用域的概念;这意味着在块语句(比如for语句)中定义的变量,不会因为离开了for块就失效。

  • 使用了块级作用域后,匿名函数中定义的任何变量,都会在执行结束时被销毁;
  • 一般来说,我们都应该尽可能少向全局作用域中添加变量和函数;过多的全局变量和函数很容易导致命名冲突
  • 使用块级作用域,每个开发者既可以使用自己的变量,又不必担心搞乱全局作用域;
  • 在全局作用域中使用块级作用域可以减少闭包占用的内存问题.

私有变量

JavaScript没用私有属性的概念;所有的属性都是公用的;

私有变量的概念:在任何函数中定义的变量,都是私有变量,因为不能在函数外部访问这些变量;

  • 私有变量:包括函数的参数/局部变量和在函数内部定义的其他函数;
  • 特权方法:内部创建一个闭包,闭包可以访问私有变量;因此创建用于访问私有变量的公用方法,称作特权方法
  • 可以通过构造方法传参来访问私有变量

    这种方法的缺点是会为每一个实例创建一组新的方法,不能实现共享。

静态私有变量

通过块级作用域(私有作用域)中定义私有变量或函数,创建对外公共的特权方法;

  • 首先创建私有作用域
  • 定义私有变量或函数
  • 定义构造函数和特权方法
  • 这种方式创建的私有变量因为使用原型而实现共享。
  • 同时由于共享,实例也就没有自己的私有变量。

javascript进阶课程--第三章--匿名函数和闭包相关推荐

  1. 百度Apollo智能驾驶进阶课程——第三章 百度Apollo定位技术

    无人车车辆定位技术入门与应用 1. 技术入门 1.1 什么是无人车自定位技术 1.2 为什么无人车需要一个精准的定位系统 1.3 定位技术的分类 2. 基础知识 2.1 三维几何变换 2.1.1 坐标 ...

  2. javascript进阶课程--第一章--函数

    javascript进阶课程--第一章--函数 学习要点 了解内存管理 掌握全局函数的使用 知识点 基本类型和引用类型 基本类型值有:undefined,NUll,Boolean,Number和Str ...

  3. 《JavaScript忍者秘籍》(第二版)- 第5章 -精通函数:闭包和作用域

    目录 第5章 精通函数:闭包和作用域 5.1 理解闭包 5.2 使用闭包 5.2.1 封装私有变量 5.2.2 回调函数 5.3 通过执行上下文来跟踪代码 5.4 使用词法环境跟踪变量的作用域 5.4 ...

  4. JavaScript 匿名函数与闭包

    匿名函数与闭包 匿名函数 闭包 概念 相关知识点 闭包中的this 循环函数中的匿名函数和闭包 循环函数中的匿名函数 循环函数中的闭包 模仿块级作用域 私有变量 静态私有变量 匿名函数 没有函数名的函 ...

  5. 【C语言笔记初级篇】第三章:函数与递归

    第三章:函数 (1)函数是什么 在计算机科学中,子程序是一个大型程序中的某部分代码, 由一个或多个语句块组成.它负责完成某项特定任务,而且相较于其他代码,具备独立性.一般会有输入参数并有返回值,提供对 ...

  6. 《Python数据分析基础教程:NumPy学习指南(第2版)》笔记5:第三章 常用函数1——文件读写、算术平均值、最大值最小值、极值

    本章将介绍NumPy的常用函数.具体来说,我们将以分析历史股价为例,介绍怎样从文件中载入数据,以及怎样使用NumPy的基本数学和统计分析函数.这里还将学习读写文件的方法,并尝试函数式编程和NumPy线 ...

  7. 《Python数据分析基础教程:NumPy学习指南(第2版)》笔记8:第三章 常用函数4——线性模型、数组修剪与压缩、阶乘

    本章将介绍NumPy的常用函数.具体来说,我们将以分析历史股价为例,介绍怎样从文件中载入数据,以及怎样使用NumPy的基本数学和统计分析函数.这里还将学习读写文件的方法,并尝试函数式编程和NumPy线 ...

  8. JavaScript匿名函数和闭包

    概述 在JavaScript前端开发中,函数与对其状态即词法环境(lexical environment)的引用共同构成闭包(closure).也就是说,闭包可以让你从内部函数访问外部函数作用域.在J ...

  9. Mysql系列课程--第三章 建表 插数据

    数据库模型图 /班级表/ CREATE TABLE `class` (`c_no` int(11) NOT NULL AUTO_INCREMENT,`c_name` varchar(45) NOT N ...

最新文章

  1. 南非的5DT数据手套使用说明
  2. arraylist切割_JAVA List和Map切割工具详解
  3. 完整项目基础架构精简版-实现权限管理
  4. 基于visual c++之windows核心编程代码分析(64)现有的exe文件中添加自己的代码
  5. HDFS中的safemode
  6. 【技术+某度面经】Jenkins 内容+百度面经分享
  7. c程序预处理器的设计与实现_C预处理器-能力问题与解答
  8. 水平集与图割算法浅析
  9. 一主多备几影响 oracle,Oracle 10g 一主多备的搭建技巧
  10. 基于迁移学习的辣椒病虫害搜索模型(裁剪病害区)
  11. Express入门( node.js Web应用框架 )
  12. Java基础:接口多态的综合案例 —— 笔记本电脑
  13. java多线程join()方法原理详解
  14. 《遥感原理与应用》总结—遥感平台
  15. EXCEL数据组合的用法
  16. Python再次拿第一,我一点都不意外,只是有些事情并非人人都看得清楚
  17. 获取洞口边界及在墙上开洞(Revit二次开发)
  18. Kubernetes 管理员认证(CKA)考试笔记(四)
  19. 【EMC电磁兼容】01.13——窄带与宽带
  20. Web组态编辑器赋能智慧石油生产储运2D可视化

热门文章

  1. UNP Chapter 19 - 多播
  2. nyoj------20吝啬的国度
  3. XAMPP中启动tomcat报错的解决方法
  4. 3D MRI brain tumor segmentation using autoencoder regularization
  5. C++ Primer Plus学习(九)——内存模型和名称空间
  6. ROS☞通过两种方法提取.bag中的图像数据
  7. treemap底层结构_HashMap面试必问的数据结构相关知识总结
  8. php wp foo,WordPress 常用函数 / wpautop
  9. 狂神说 es笔记_【开源推荐】专门为程序员朋友量身打造的笔记软件—— Boostnote...
  10. python不同颜色散点图_Python+matplotlib绘制不同大小和颜色散点图实例