JavaScript中的闭包原理分析

 更新时间:2010年03月08日 17:52:07   作者:  
一看到闭包这个词,我就会想起线性代数中的封闭空间,也就是说,这个空间中的所有向量,无论经过何种运算,最终结果还是会落在该空间中。那么JavaScript中会不会也是类似的概念呢?
我们来看一个定义:
Closure
所谓“闭包”,指的是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。
这说明了,JavaScript中的闭包是包含了上下文的函数,也就是说,这个函数的作用基础,是它所处的环境,这是不能超越的,跟线性代数是不是有一点似曾相识的感觉呢?
换个角度看,闭包的作用是为了实现OO。JavaScript中,没有像C++那样的public、private、protect属性标识, 建立起类比较困难。“类是带行为的数据,而闭包是带数据的行为”,在JavaScript中我们用函数的定义代替类的定义,用闭包代替了setter/getter方法。请看一段livecode:
复制代码 代码如下:

function f1(){
    var n=1;
    function getter(){
      alert(n);
    }
    return getter;
  }

上文中n的声明和函数getter组成了一个典型的闭包。最终返回的函数,即刚刚所讲的“行为”,其实目的就是为了得到n的值,所以说闭包就是带有数据的行为。
另外,我觉得阮一峰说的闭包也是很简洁的:“我的理解是,闭包就是能够读取其他函数内部变量的函数。”
另一篇更为学术的解释:
http://demo.jb51.net/js/javascript_bibao/index.htm
我希望各位能够真正从学术上的定义理解闭包,因为所有对闭包定义的诠释和简化都是对JavaScript的片面解读。

相关文章

  • tkinter使用js的canvas实现渐变色

    tkinter使用js的canvas实现渐变色

    这篇文章主要为大家介绍了tkinter使用canvas实现渐变色,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-12-12
  • JavaScript面向对象程序设计创建对象的方法分析

    JavaScript面向对象程序设计创建对象的方法分析

    这篇文章主要介绍了JavaScript面向对象程序设计创建对象的方法,结合实例形式分析了javascript使用object构造函数和对象字面量来创建对象的相关操作技巧,需要的朋友可以参考下
    2018-08-08
  • Bootstrap企业网站实战项目4

    Bootstrap企业网站实战项目4

    这篇文章主要为大家分享了Bootstrap企业网站实战项目,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-10-10
  • 小程序测试后台服务的方法(ngrok)

    小程序测试后台服务的方法(ngrok)

    这篇文章主要介绍了小程序测试后台服务的方法(ngrok),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-03-03
  • JS封装的三级联动菜单(使用时只需要一行js代码)

    JS封装的三级联动菜单(使用时只需要一行js代码)

    在实际的项目开发中,我们经常需要三级联动,比如省市区的选择,商品的三级分类的选择等等。这篇文章主要介绍了JS封装的三级联动菜单(使用时只需要一行js代码)的相关资料,需要的朋友可以参考下
    2016-10-10
  • 通过flv.js播放监控示例深入探究直播流技术

    通过flv.js播放监控示例深入探究直播流技术

    本文记录一下在使用 flv.js 播放监控视频时踩过的各种各样的坑,虽然官网给的 Getting Started 只有短短几行代码,跑一个能播视频的 demo 很容易,但是播放时各种各样的异常会搞到你怀疑人生,下面我将自己踩过的坑,以及踩坑过程中补充的相关知识,详细总结一下
    2023-10-10
  • 微信小程序实现顶部固定 底部分页滚动效果

    微信小程序实现顶部固定 底部分页滚动效果

    这篇文章主要介绍了微信小程序实现顶部固定底部分页滚动效果,本文大概给大家分享三种解决方案,每种方案给大家详细剖析通过代码解析哪种方案更适合,感兴趣的朋友跟随小编一起看看吧
    2022-10-10
  • 浅析JavaScript 函数防抖和节流

    浅析JavaScript 函数防抖和节流

    这篇文章主要介绍了JavaScript 函数防抖和节流的相关资料,文中讲解非常细致,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • js使用Replace结合正则替换重复出现的字符串功能示例

    js使用Replace结合正则替换重复出现的字符串功能示例

    这篇文章主要介绍了js使用Replace结合正则替换重复出现的字符串功能,可实现关键词描红的功能,涉及JS重复匹配的相关操作技巧,需要的朋友可以参考下
    2016-12-12
  • uniapp中uni.navigateBack返回后刷新页面数据的实现

    uniapp中uni.navigateBack返回后刷新页面数据的实现

    本文主要介绍了uniapp中uni.navigateBack返回后刷新页面数据的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-11-11

最新评论