文章目录

  • 闭包:作用域应用的特殊情况,
    • 1.函数作为返回值被返回
    • 2.函数作为参数被传递
  • 闭包:重用变量同时保护变量不被污染的机制。

闭包:作用域应用的特殊情况,

有2种表现

1.函数作为返回值被返回

        // 函数作为返回值function create(){const a = 100return function(){console.log(a)}}const fn = create()const a = 200fn() // 100

2.函数作为参数被传递

        // 函数作为参数被传递function print(fn){const a = 200fn()}const a = 100function fn(){console.log(a)}print(fn) // 100// 注:所有的自由变量的查找,是在函数定义的地方,向上级作用域查找,而不是在执行的地方

闭包:重用变量同时保护变量不被污染的机制。

外层函数被调用后,外层函数的作用域对象(因为被内层函数引用着)无法释放,则会产生闭包。
缺点在于不会自动释放,只能手动释放,易造成内存泄露,从而比普通函数占用更多的空间

    let funs = []for(let i = 0; i < 3; i++){funs[i] = (function(i){// 注意此处是按值传递return function(){console.log('i:',i)}})(i)}/* 执行后形成闭包funs = [function(){ (i=0)console.log('i:',i)},function(){ (i=1)console.log('i:',i)},function(){ (i=2)console.log('i:',i)},]*/funs[0]() // 0funs[1]() // 1funs[2]() // 2function fun(){for(let i = 0,arr = []; i < 3; i++){arr[i] = function(){console.log('i',i)}}return arr}let funs1 = fun()/*外层函数被调用1次,执行后形成一个闭包*/funs1[0]() // 3funs1[1]() // 3funs1[2]() // 3

2020-6:闭包(JavaScript)相关推荐

  1. 闭包 —JavaScript面向对象高级

    # 闭包 # 我的理解:面试时,先说作用域链,再说闭包产生的原因,然后是垃圾回收GC,最后说闭包. a.一个函数内部声明的变量,就是它的私有变量.        b.在javascript中特性中,函 ...

  2. 函数闭包--JavaScript权威指南--基础篇4

    函数JavaScript权威指南–基础篇4 一.知识点–函数–闭包 1.要理解函数闭包,要先知道几个概念: ①块级作用域和函数作用域的概念 FAQ:什么是块级作用域? 在类C语言中是这么定义的:变量的 ...

  3. JAVAWeb学习笔记2020/5/15——JavaScript高级笔记

    第一章 DOM简单学习:为了满足案例要求 1. 功能:控制html文档的内容 2. 获取页面标签(元素)对象:Element document.getElementById("id值&quo ...

  4. 2020年,JavaScript开发人员必备的5项高薪技能

    全文共1816字,预计学习时长5分钟 图源:unsplash 开发人员的一生可以用两句话概括:计算器,以及学习新技能.成为开发人员绝非易事,他们是解决问题的人,也是不断学习的人.科技世界每天都在快速变 ...

  5. JavaScript进阶系列01,函数的声明,函数参数,函数闭包

    本篇主要体验JavaScript函数的声明.函数参数以及函数闭包. □ 函数的声明 ※ 声明全局函数 通常这样声明函数: function doSth() { alert("可以在任何时候调 ...

  6. Javascript闭包——懂不懂由你,反正我是懂了

    摘要:"如果你不能向一个六岁的孩子解释清楚,那么其实你自己根本就没弄懂."好吧,我试着向一个27岁的朋友就是JS闭包(JavaScript closure)却彻底失败了. 越来越觉 ...

  7. javascript 中的暗物质 - 闭包

    1. 诡异的闭包 javascript 中有一个特殊的特性 - 闭包,对于 .NET 程序员来说,比较熟悉的是面向对象的程序设计 OOP,  而来自函数式语言的闭包则显得比较诡异,许多程序员对它敬而远 ...

  8. javascript闭包_通过邮寄包裹解释JavaScript闭包

    javascript闭包 by Kevin Kononenko 凯文·科诺年科(Kevin Kononenko) 通过邮寄包裹解释JavaScript闭包 (JavaScript Closures E ...

  9. Deno 冲上榜首,Vue.js 首次屈居第二,JavaScript 2020 年度“新起之秀”都有谁?

    整理 | 郑丽媛 出品 | CSDN(ID:CSDNnews) 近些年来,科技领域飞速发展,人工智能.云计算.大数据.物联网等新兴技术日益蓬勃,各类前沿技术逐渐落地,服务于每个人的日常点滴.这些技术究 ...

  10. javascript 闭包的好处及坏处

    闭包javascript 是最强大的特征之一,它允许函数访问局部作用域之外的函数. 创建闭包的常见方式:就是在一个函数里创建另一个函数 function fun(){return function{a ...

最新文章

  1. centos安装软件_CentOS 8 和 Ubuntu 18.04 部分软件版本比较
  2. 计算机义务维修队,我院捷诚义务维修服务队电脑维修服务活动
  3. 高效程序员的45个习惯 pdf_高效瑜伽人的 5 个习惯,你get到了几个?
  4. Fragment生命周期与Fragment执行hide、show后的生命周期探讨
  5. DP备份任务失败原因解析
  6. 代码中有个get是啥意思_是时候秀一波了,甩掉get和set,Lombok让代码更简洁
  7. AI学习笔记(四)相机模型、图像聚类算法
  8. apache poi使用例_使用java Apache poi 根据word模板生成word报表例子
  9. 终于掌握vim的寄存器和系统剪贴板的使用了- 要安装vim-X11包
  10. python字符串和字节串有什么区别_python中的字符串和字节串
  11. 虚拟机Linux服务器网络设置
  12. Bulletproofs、Sigma protocol、Halo2等ZK方案小结
  13. stm32定时器3产生1us延时的函数
  14. 高德地图第三方工具网站
  15. 【细胞分割】基于阙值+边缘+形态学+种子点图像分割matlab源码含 GUI
  16. 清除“全能车”这颗“毒瘤”,共享单车再出发
  17. php artisan 命令详解,Artisan命令详解
  18. 31年前的Beyond演唱会,是如何超清修复的?(推荐)
  19. android装windows bios,普通安卓平板刷win10图文教程
  20. 浙江大学计算机学院的软件工程和软件学院的软件工程哪个好,软件工程专业最强十校,浙大第二、清华第五,这所师范类院校很意外...

热门文章

  1. 解说:C++难在了哪里?
  2. git分支怎样改名字
  3. 交叉表 mysql_MySQL交叉表_MySQL
  4. 荣耀笔记本linux指纹设置方法,magicbookwin10系统指纹无法录入怎么办 荣耀笔记本不能使用指纹怎么解决...
  5. 散场电影,给一个陌生人看:伤感日志
  6. POI分析之城市功能区识别与时空变化
  7. 2018.7.9-注册及头像预览
  8. Android 5.0(Lollipop)事件输入系统(Input System)
  9. 阿里云负载均衡的分发权重配置不生效
  10. C#【自动化测试】对Windows桌面应用程序进行UI自动化测试