function fold(a, b, c) {
return function() {
doSomething(a, b, c);
}
}
var newFunc = fold("Hello", " ", "World");
setTimeout(newFunc, 1000); // 输出为 Hello World
代码中的doSomething需要三个参数来完成其功能。如果直接将doSomething传给setTimeout的话,三个参数的值都是 undefined 。fold将三个参数的值保存在激活对象,并添加在作用域链中。这样即便返回的 function 是没有参数的,它仍然可以获得这三个参数的值。
关于闭包的更多内容,请参见参考资料。