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

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

  初学JavaScript闭包时,闭包这个概念在我眼里及其的神秘,也不知道这个东西在讲什么,尤其某些地方的闭包概念定义的非常抽象,属于那种本来你可能明白这个概念,看了反而又把你给绕糊涂了,学习了这么长时间的JavaScript,看了不少的书,对闭包的这个概念也算是稍稍有点体会的了,这里顺便推荐两本书《你不知道的JavaScript》和《JavaScript忍者秘籍》。

  之前有次面试的时候,面试官让我写一个闭包的例子,我就写了下面的代码:

var a = 100;(function(){    console.log(a); //100})();

上面这个例子从广义上讲确实算是一个闭包的例子,但是实质上讲其实算是一个词法作用域的例子,其中涉及到RHS。但却不是一个很合适的讲述闭包的例子,后面看到一个例子算是一个比较好解释闭包的代码:

function fn(){    var a = 100;    function func(){        console.log(a);    }    return func;}var func = fn();func(); //100

  这个例子才算是一个比较好的闭包的概念。

当函数可以记住并访问所在的词法作用域时,就产生了闭包,即使函数是在当前的词法作用域之外的执行的。

  上面这个概念是引申自《你所不知道的JavaScript》中,变量a定义在函数fn()的作用域中,并且函数fn()中含有一个内部函数func(),内部函数func()持有对变量a的引用。在正常情况下,当函数func执行后就,内部的变量就会被垃圾回收机制所回收(比如变量a)。但是函数fn()返回了内部函数func(),内部函数func()会随时访问变量a,所以垃圾回收机制是不会回收函数fn()的内部作用域的,这就是闭包的含义。也就是

函数在定义的词法作用域以外的地方被调用,闭包使得函数可以继续访问定义时的词法作用域。

  现在你对闭包的理解会不会有种恍然大悟的感觉呢?如果没有?那建议看看《你所不知道的JavaScript》和《JavaScript忍者秘籍》这两本书,里面对闭包讲解的都非常的棒。

转载地址:http://bezmx.baihongyu.com/

你可能感兴趣的文章
数据结构——栈——寻找下一个较大元素
查看>>
AngularJS directive入门例子
查看>>
Torch7的安装
查看>>
将 Shiro 作为应用的权限基础
查看>>
screen 常用命令
查看>>
tmux常用快捷键
查看>>
rocketMq
查看>>
jQuery 获取文件后缀的方法
查看>>
2015年排名前5的开源项目管理工具
查看>>
分布式文件系统 FastDFS 5.0.8 & Linux CentOS 6.7 安装配置
查看>>
转:Java中String与byte[]的转换
查看>>
Python学习札记(三) I/O
查看>>
微信 获取wx.config 参数 基类
查看>>
MySQL(四)字段及常用函数
查看>>
Face Aging with Conditional Generative Adversarial Network 论文笔记
查看>>
Java虚拟机学习 - 对象访问 (2)
查看>>
Atitit 通用接口的设计与实现attilax 总结
查看>>
高通Android camera运行流程【转】
查看>>
thinkPHP 上传文件的中文乱码
查看>>
C#编程(六十六)----------表达式树总结
查看>>