博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
浅谈JavaScript中闭包
阅读量:5307 次
发布时间:2019-06-14

本文共 616 字,大约阅读时间需要 2 分钟。

  借用高程(JavaScript高级程序设计)中对闭包的定义:闭包是指有权访问另一个函数作用域中的变量的函数。而我想对这句话加一个修饰条件就更能反应闭包的含义了。

  闭包是指在任何地方都有权访问另一个函数作用域中的变量的函数。
所以,通常我们会在一个函数里return另一个函数,这样更能体现 在任何地方,有权访问另一个函数(外层函数)中的变量。

下面我们可以通过一张图来更加直观的理解下,闭包函数为何能在任何地方都有权访问外层函数内部的变量。

  我们都知道,控制变量的访问权限这是作用域链的职责(),从上图中,我们可以看出,闭包函数 bibao 的内部属性 [[Scopes]] 上记录了定义当前函数时的作用域链,当执行bibao函数时,会将[[Scopes]]属性取出生成一个作用域链并且将当前函数的活动对象推入作用域链的最顶层,这样,不管在什么位置就都能访问内部函数的属性,如图中的 k 变量。

  ⚠️注意,当内部函数没有指向或者引用内部函数中的变量时,这个时候,内部函数是不会构成闭包的,请参考下图。

 

  如上图所示,闭包函数内部属性 [[Scopes]] 中没有外层函数的活动对象,所以执行该函数时无法访问外层函数的变量 k。因此,当内层函数中没有引用外层函数中的变量时,就不会构成一个闭包函数。

  

转载于:https://www.cnblogs.com/tianzun-blog/p/9271480.html

你可能感兴趣的文章
objective-c overview(二)
查看>>
python查询mangodb
查看>>
consonant combination
查看>>
驱动的本质
查看>>
Swift的高级分享 - Swift中的逻辑控制器
查看>>
Swagger简单介绍
查看>>
Python数据分析入门案例
查看>>
vue-devtools 获取到 vuex store 和 Vue 实例的?
查看>>
Linux 中【./】和【/】和【.】之间有什么区别?
查看>>
内存地址对齐
查看>>
看门狗 (监控芯片)
查看>>
css背景样式
查看>>
JavaScript介绍
查看>>
开源网络漏洞扫描软件
查看>>
yum 命令跳过特定(指定)软件包升级方法
查看>>
创新课程管理系统数据库设计心得
查看>>
Hallo wolrd!
查看>>
16下学期进度条2
查看>>
Could not resolve view with name '***' in servlet with name 'dispatcher'
查看>>
Chapter 3 Phenomenon——12
查看>>