日期:2014-05-16  浏览次数:20355 次

揭开Javascript闭包的真实面目

?

对于初学者来说,理解Javascript闭包(closure)还是比较困难的,而撰写此文的目的就是用最通俗的文字揭开Javascript闭包的真实面目,让初学者理解起来更加容易一些。

一、什么是闭包?

“官方”的解释是:闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。相信很少有人能直接看懂这句话,因为他描述的太学术。

其实这句话通俗的来说就是:JavaScript中所有的function都是一个闭包。不过一般来说,嵌套的function所产生的闭包更为强大,也是大部分时候我们所谓的“闭包”。看下面这段代码:

  1. function?a()?{? ?
  2. ? var?i?=?0;?
  3. ? function?b()?{? ?
  4. ? alert(++i);? ?
  5. }? ?
  6. ? return?b;? ?
  7. }? ?
  8. var?c?=?a();? ?
  9. c();??

这段代码有两个特点:

1. 函数b嵌套在函数a内部。

2. 函数a返回函数b。

这样在执行完var c=a()后,变量c实际上是指向了函数b,b中用到了变量i,再执行c()后就会弹出一个窗口显