javascript闭包的定义及应用实例分析

时间:2024-08-25 16:39:02 JavaScript 我要投稿
  • 相关推荐

javascript闭包的定义及应用实例分析

  官方解释

  “闭包”是一个拥有许多变量和绑定了这些变量的环境表达式(通常是一个函数),因而这些变量也是环境表达式的一部分。

  通俗解释

  Javascript中所有的函数都是一个闭包。不过一般来说,嵌套的function产生的闭包更为强大,也是大部分时候我们所说的“闭包”。看如下代码:

  复制代码 代码如下:

  这段脚本在执行完var c=a()之后,变量c实际上就指向了函数b,b中用到了变量i,再执行c()后就会弹出一个窗口显示i的值。这段代码其实就是一个闭包,为什么?因为函数a外的变量c引用了函数a内部的函数b。

  Javascript的垃圾回收机制

  由于javascript特殊的垃圾回收机制,才导致了闭包的产生。Javascript垃圾回收机制的大体规则如下:

  在javascript中,如果一个对象不再被引用,那么这个对象就会被GC回收。如果两个对象相互引用,而不再被第3者引用,那么这两个互相引用的对象也会被回收。而在上述的脚本中,函数a被b引用,函数b又被函数a外的c所引用,这就是为什么函数a执行后不被回收的原因。

  闭包的应用场景

  1. 保护函数内的变量安全。以上面的例子为例,函数a中变量i只有函数b才能访问,而无法通过其他途径访问到,因此保护了i的安全性。

  2. 在内存中维持一个变量。依然如上面的例子,由于闭包,函数a中的i一直存在于内存中,因此每次执行c(),i都会加1。

  3. 通过保护变量的安全实现JS私有属性和私有方法(不能被外部访问)。如下,私有属性和私有方法在Constructor外是无法访问的:

  复制代码 代码如下:

  function Constructor(…){

  var that = this;

  var membername = value;

  function membername(…){…}

  }

【javascript闭包的定义及应用实例分析】相关文章:

Javascript 闭包引起IE内存泄露分析04-01

javascript的闭包概念怎么理解03-29

Javascript函数的定义和用法分析03-31

JavaScript fontcolor方法入门实例03-29

JavaScript中push(),join() 函数实例详解03-31

抽象语法树在JavaScript中的应用03-25

javascript分析运算符用法04-01

JavaScript类定义原型方法的两种实现的区别04-02

德国留学申请实例分析03-19