闭包

用一句话总结:闭包就是作用域的延伸
解释:函数内部的作用域属于局部作用域,导致只有函数内部才可以访问声明的变量。而闭包可以将局部作用域延伸,使其在函数外部也可以访问内部声明的变量等。

关于变量的作用域

js变量的作用域无非就两种 局部变量全局变量

JavaScript在函数内部可以访问全局变量

var n = 0;//全局变量
function f1() {console.log(n)//0
}f1();

而在函数内部声明的局部变量,外部无法直接访问

function f1(){var n=0;//局部变量 //需要注意的是一定要使用var关键字声明才会是局部变量//若直接 n=0; n则是一个全局变量,外部可以访问
}
console.log(n)//n is not defined

此时思考一个问题,怎么样才能在外部访问函数内部的局部变量??

此时闭包的作用就体现出来了,看下方例子

function f1() {var n = 0;// 此时f2函数就是闭包function f2() {return n}return f2()
}
let n1 = f1();
console.log(n1)//0

解释:f1是f2的父级,所以在f2中可以访问f1中的局部变量,那么转换一下思路,通过 f2函数 将变量return出来,这样不就可以在f1函数的外部访问内部变量了吗

f2函数起到一个中间连接作用,在上面代码中f2函数就是闭包。换句话讲:闭包就是 可以访问到其他函数内部的变量 的函数

往期精彩文章

  • leetcode-js刷题记录&数据结构
  • docker下YApi部署教程-支持swagger数据导入
  • 使用Object.defineProperty进行数据劫持,实现响应式原理-剖析vue2.0
  • 前端性能优化之rel=“prefetch“预/懒加载功能
  • 前端唤起相机的方法H5+JS

带你深入理解什么叫js闭包相关推荐

  1. JS闭包的理解及常见应用场景

    JS闭包的理解及常见应用场景 一.总结 一句话总结: 闭包是指有权访问另一个函数作用域中的变量的函数 1.如何从外部读取函数内部的变量,为什么? 闭包:f2可以读取f1中的变量,只要把f2作为返回值, ...

  2. 简单理解js闭包、类型引用....第一章

    js 闭包函数.类型引用.this指向.对象原型链...这些东西让我们对js又爱又恨!js虐我千百遍,我待js如初恋. 很多初学者一开始会觉得这些概念没什么用,导致对这些东西产生一种抵抗力.接下来我们 ...

  3. 面试官:谈谈对JS闭包的理解及常见应用场景(闭包的作用)

    文章目录 对JS闭包的理解及常见应用场景(闭包的作用) 1.变量作用域 2.如何从外部读取函数内部的变量? 3.闭包概念 4.闭包用途 5.闭包的理解 6.闭包应用场景 setTimeout传参 回调 ...

  4. 深入理解JS闭包(一看就会)

    前言 JS闭包,对于每一个前端而言都是一个绕不开的概念.本人学习之初,因为闭包这个概念而花费了大量的时间以及精力去理解这个概念.所以在这里,我打算写一篇文章来分享一下本人的学习心得以及我眼中的闭包. ...

  5. js闭包的理解(传递闭包的通俗理解)

    如何理解和应用javascript闭包 闭包是:指有有访问另一个函数作用域中的变量的函数. 创建闭包的常用方式:在一个函数内部创建一个函数.例子: functioncreateFunction(nam ...

  6. js闭包的理解和作用

    一.为什么引入闭包 JS为每个变量对象定了作用域,在ES5 中只有全局作用域和函数作用域,没有块级作用域,由内向外形成作用域链,函数外部不能访问函数内部作用域的局部变量.在实际开发中会带来很多不便. ...

  7. js闭包-实现打字机动画效果

    简介 闭包就是能够读取其他函数内部变量的函数.例如在javascript中,只有函数内部的子函数才能读取局部变量,所以闭包可以理解成"定义在一个函数内部的函数".在本质上,闭包是将 ...

  8. 两个函数彻底理解Lua中的闭包

    本文通过两个函数彻底搞懂Lua中的闭包,相信看完这两个函数,应该能理解什么是Lua闭包.废话不多说,上 code: 1 --[[************************************ ...

  9. 深入理解javascript原型和闭包(16)——完结

    之前一共用15篇文章,把javascript的原型和闭包. 首先,javascript本来就"不容易学".不是说它有多难,而是学习它的人,往往都是在学会了其他语言之后,又学java ...

最新文章

  1. debian预装环境软件的设置
  2. 如何把定义的数组传回主函数_java数组如何定义
  3. url 函数 php,php中url处理函数总结
  4. C++|Qt工作笔记-对explicit的认识(Qt中一般情况下为什么会自动加上这个关键字)
  5. 防震计算机主机,一种防震计算机主机的制作方法
  6. java基础 6 基本类型与运算
  7. centOS7安装nodejs(8.4.0)(详细步骤)
  8. abd shell关闭所有程序_带你进一步了解“终端”Shell
  9. C语言: gotoxy函数
  10. Laravel框架安装
  11. win 10 桌面路径还原到C盘拒绝访问
  12. 获取当前经纬度 和 通过经纬度 得到大致位置的接口
  13. 转:一位10年Java工作经验的架构师聊Java和工作经验
  14. 2017年华东师范大学网络赛 A
  15. 如果今天是我生命中的最后一天
  16. 【Android】关于statusbar的处理
  17. ERP软件中功能测试的实用方法
  18. 一个学长的——【编程】——学习路线
  19. ThinkPHP5之Ajax分页
  20. 抖音、快手、百度等105款App 遭通报

热门文章

  1. 001-删除留言案例
  2. 自然语言--Trie树详解及其应用
  3. 语音包软件测试,抖音nanami语音包
  4. 数据库的约束和设计(完整版)
  5. goto语句 switch语句
  6. 数据挖掘之朴素贝叶斯算法
  7. java.lang.UnsatisfiedLinkError: dlopen failed: quot;/data/app/lib/arm/libiProtectPAB.so invalid
  8. 第十五次 Java作业
  9. c# 变量不可访问,因为它具有一定的保护级别
  10. KPI Scorecard - 基础应用