天天看点

闭包--循序学习1.javascript的闭包

感觉似懂非懂的概念,这里记录理解进程。

什么是闭包

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

相信很少有人能直接看懂这句话,因为他描述的太学术。我想用如何在Javascript中创建一个闭包来告诉你什么是闭包,因为跳过闭包的创建过程直接理解闭包的定义是非常困难的。看下面这段

1

2

3

4

5

6

7

8

9

<code>function</code> <code>a(){</code>

<code>var</code> <code>i=0;</code>

<code>function</code> <code>b(){</code>

<code>alert(++i);</code>

<code>}</code>

<code>return</code> <code>b;</code>

<code>var</code> <code>c=a();</code>

<code>c();</code>

这段代码有两个特点:

1、函数b嵌套在函数a内部;

2、函数a返回函数b。

这样在执行完var c=a( )后,变量c实际上是指向了函数b,再执行c( )后就会弹出一个窗口显示i的值(第一次为1)。这段代码其实就创建了一个闭包,为什么?因为函数a外的变量c引用了函数a内的函数b,就是说:

当函数a的内部函数b被函数a外的一个变量引用的时候,就创建了一个闭包。

在上面的例子中,由于闭包的存在使得函数a返回后,a中的i始终存在,这样每次执行c(),i都是自加1后alert出i的值。

唯有不断学习方能改变!

-- <b>Ryan Miao</b>