使用闭包
来源:互联网 发布:演唱会抢票软件 编辑:程序博客网 时间:2024/05/22 15:31
题目描述
实现函数 makeClosures,调用之后满足如下条件:
1、返回一个函数数组 result,长度与 arr 相同
2、运行 result 中第 i 个函数,即 resulti,结果与 fn(arr[i]) 相同
输入例子:
var arr = [1, 2, 3];
var square = function (x) {
return x * x;
};
var funcs = makeClosures(arr, square);
funcs1;
输出例子:
4
题目亮点
function makeClosures(arr, fn) {
var result = new Array();
arr.forEach(function(item){
result.push(function(){
return fn(item);
})
})
return result;
}
简单的描述闭包:如果在函数func内部声明函数inner,然后在函数外部调用inner,这个过程即产生了一个闭包。
题目要求的是返回一个函数数组,如果在循环中直接写
result[i] = function(){return fn(arr[i]);}
或者
result.push(function(){return fn(arr[i]);}),
最终的结果是不正确的,因为在每次迭代的时候,那样的语句后面的方法并没有执行,只是创建了一个函数体为“return fn(arr[i]);”的函数对象而已,当迭代停止时,i为最终迭代停止的值,在函数被调用时,i依旧为最终迭代停止的值,因此无法返回正确的结果。
为了解决这个问题,需要声明一个匿名函数,并立即执行它。
function(num){return function(){return fn(arr[num]); }; }(i),函数执行后,i立即传入并被内部函数访问到,因此就能得到正确的结果。闭包允许你引用存在于外部函数中的变量。
下面的代码使用的是forEach循环
function makeClosures(arr, fn) {
var result = [];
arr.forEach(function(i){
return fn(i); ); }); return result;
}
方法二:ES6直接用let
function makeClosures(arr, fn) {
var result = new Array();
for(let i=0;i
- 闭包的使用
- javascript闭包使用
- 使用闭包
- 使用闭包
- 使用闭包
- 闭包的使用
- JavaScript 闭包的使用
- JavaScript闭包使用总结
- 循环中使用闭包
- Swift使用闭包表达式
- Swift闭包的使用
- Swift-闭包简单使用
- 为什么要使用闭包
- Swift 函数,闭包使用
- JS闭包的使用
- swift闭包的使用
- Swift--08闭包使用
- Swift 闭包的使用
- Linux(CentOS) 如何查看当前占用CPU或内存最多的K个进程
- Spring装配Bean——通过配置XML装配bean
- HDU 2087 剪花布条(KMP )
- 11-软件研制总结报告
- 信息管理与维护怎么形成
- 使用闭包
- POJ 2965 The Pilots Brothers' refrigerator (DFS + 枚举)
- Cornerstone无法查看log解决办法
- C++ Primer Chapter 8-2
- 每天一个Linux命令(57):scp
- 浅谈webWorker
- 近来总结
- 测试开发之路:英雄迟暮,我心未老
- web工具类(一)——字符串、日期的自定义操作类