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的片面解读。

相关文章

  • javascript实现简单加载随机色方块

    javascript实现简单加载随机色方块

    这篇文章主要介绍了javascript实现简单加载随机色方块的相关资料,感兴趣的小伙伴们可以参考一下
    2015-12-12
  • 微信小程序使用swiper组件实现层叠轮播图

    微信小程序使用swiper组件实现层叠轮播图

    这篇文章主要为大家详细介绍了微信小程序使用swiper组件实现层叠轮播图,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-11-11
  • js验证账户名是否重复

    js验证账户名是否重复

    这篇文章主要为大家详细介绍了js验证账户名是否重复,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-05-05
  • javascript常见操作汇总

    javascript常见操作汇总

    这篇文章主要介绍了javascript常见操作,有针对字符串、时间、表单等的操作,以及验证、收藏、随机数等其他常见技巧,需要的朋友可以参考下
    2014-09-09
  • 原生js实现下拉框选择组件

    原生js实现下拉框选择组件

    这篇文章主要为大家详细介绍了原生js实现下拉框选择组件的开发,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-01-01
  • JavaScript获取中英文混合字符串长度的方法示例

    JavaScript获取中英文混合字符串长度的方法示例

    这篇文章主要介绍了JavaScript获取中英文混合字符串长度的方法,结合实例形式分析了javascript通过遍历转换字符串实现统计字符串长度的操作技巧,需要的朋友可以参考下
    2017-02-02
  • nullJavascript中创建对象的五种方法实例

    nullJavascript中创建对象的五种方法实例

    今天上午,非常郁闷,有很多简单基础的问题搞得我有些迷茫,哎,代码几天不写就忘。目前又不当COO,还是得用心记代码哦!
    2013-05-05
  • 有关文件上传 非ajax提交 得到后台数据问题

    有关文件上传 非ajax提交 得到后台数据问题

    本文给大家介绍关于文件上传非ajax提交得到后台数据的问题我们该怎么处理呢?下文给大家介绍的非常详细,感兴趣的朋友一起看看吧
    2016-10-10
  • uniapp项目引入 js文件以及全局使用方法

    uniapp项目引入 js文件以及全局使用方法

    这篇文章主要给大家介绍了关于uniapp项目引入 js文件以及全局使用方法的相关资料,在Uniapp中引入JS文件是一项常见的操作,文中通过代码示例介绍的非常详细,需要的朋友可以参考下
    2023-12-12
  • js实现鼠标移入移出卡片切换内容

    js实现鼠标移入移出卡片切换内容

    这篇文章主要为大家详细介绍了js实现鼠标移入移出卡片切换内容,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10

最新评论