闭包的使用

思路: 先定义一个空的数组,for循环遍历数组,把数组里面的元素push到空的数组中,因为返回的是回调函数,i值需要传递进去,函数里面返回一个函数,再返回函数的元素,最后把定义的数组返回出去;

1.闭包的使用(i值的传递)

function makeClosures(arr, fn) {
// 定义一个空的数组
    var result = [];
    for (var i = 0; i < arr.length; i++) {
    // 添加到数组中
        result.push((function(num){
        // 返回一个函数(回调函数,i值需要传进来)
            return function(){
            // 返回其中的某一项
                return fn(arr[num])
            };
           // 传i值进去
        })(i));
    }
    // 把数组返回出去
    return result;
}

2.用forEach方法直接返回数组的元素

function makeClosures(arr, fn) {
// 定义一个空的数组
    var result = [];
    // forEach 循环 (第一个参数是元素, 第二个参数是下标,第三个参数是原数组)
    arr.forEach(function(ele) {
        result.push(function(){
        // 返回数组中的元素
            return fn(ele);
        });
    })
    // 返回空数组
    return result;
}

3.用es6的语法

function makeClosures(arr, fn) {
// 定义一个空的数组
    var result = [];
    // let 有块级作用域(只在大括号里面有效)
    for (let i = 0; i < arr.length; i++) {
        result.push(function() {
        // 返回数组中的元素
            return fn(arr[i]);
        });
    }
    // 返回数组出去
    return result;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值