zoukankan      html  css  js  c++  java
  • js基础闭包练习题

    题目描述

    实现函数 makeClosures,调用之后满足如下条件:
    1、返回一个函数数组 result,长度与 arr 相同
    2、运行 result 中第 i 个函数,即 result[i](),结果与 fn(arr[i]) 相同
    示例1
     1 //参考《JavaScript高级程序设计》的典型方法
     2 function makeClosures(arr, fn) {
     3     var result = new Array();
     4     for(var i=0;i<arr.length;i++){
     5         result[i] = function(num){
     6             return function(){
     7                 return fn(num);
     8                  
     9             }
    10         }(arr[i]);
    11     }
    12     return result;
    13 }
    14 
    15 //使用ES5的bind()方法
    16 function makeClosures(arr, fn) {
    17     var result = new Array();
    18     for(var i=0;i<arr.length;i++){
    19         result[i] = fn.bind(null,arr[i]);
    20     }
    21     return result;
    22 }
    23 
    24 //使用forEach()
    25 function makeClosures(arr, fn) {
    26     var result = new Array();
    27     arr.forEach(function(curr){
    28         result.push(function(){return fn(curr)});
    29     })
    30     return result;
    31 }
    32 
    33 //使用let
    34 function makeClosures(arr, fn) {   
    35     var result = new Array();
    36     for(let i=0;i<arr.length;i++){
    37         result[i] = function(){
    38             return fn(arr[i]); //let声明的变量只在let所在代码块内有效,因此每次循环的i都是一个新的变量           
    39         };
    40     }
    41     return result;
    42 }
  • 相关阅读:
    本周面试总结
    本周面试总结
    本周面试题总结
    网络请求AJAX
    es6数组、对象的解构赋值
    es6箭头函数
    es6总结
    js限定输入为数字包括负数正则
    js限定输入为非负数,浮点数正则
    js数值千分隔(正则)
  • 原文地址:https://www.cnblogs.com/xiaole9924/p/11818587.html
Copyright © 2011-2022 走看看