- Array.prototype.select = function(func)
- {
- var ary = [];
- for (var i = 0; i < this.length; ++i)
- {
- if (func(this[i]))
- ary[ary.length] = this[i];
- }
- return ary;
- };
- function managers_noclosure(emps) {
- var result = [];
- for (var i = 0; i < class="delimiters1">)
- {
- var e = emps[i];
- if (e.isManager) result[result.length] = e;
- }
- return result;
- }
- function managers(emps)
- {
- return emps.select(function (e){ return e.isManager; });
- }
而现在嚷嚷得比较厉害的Java支持也是依照这种概念: http://www.infoq.com/cn/news/2007/09/catching-up-with-closures
按照这种定义,闭包非常类似于C语言中的函数指针、C++里面的模板函数、Java中的内嵌类,虽然Martin Fowler在他文章里也在说明闭包跟这些概念的不同时提到了运行环境的问题,但似乎没有什么说服力,至少从例子上是看不出来的。
个人感觉,前面一种说法是正确的,这种说法不大对。虽然Martin Fowler的名气很大。