js中的闭包是个很难理解的概念,因为仔细思考,它似乎违背了编译原理的知识,可能是因为js是动态语言,而编译原理的知识是针对静态语言吧。看下面的例子。
1 | <script> |
输出:
1 | 3 |
这说明,js中的funtion并不是C语言中的函数,而是一个类似于对象的概念。当你执行func1()时,并不是执行一个函数,而是创造了一个对象,并执行这个对象里面的代码。当你第一次执行func1()时,创造了一个匿名对象,这个对象里面有数据cnt,而当你再次执行func1()时,又创造了一个匿名对象,这个对象里面也有cnt,但是与上一个不同。所以,上面的代码,输出3.