首页 > 解决方案 > 运行一个函数指定的次数

问题描述

var nTimes = function (n, func) {
      var numberOfTimesRan = 0;
      var resultOfRunningFunc;
      return function() {
          if (numberOfTimesRan < n) {
              resultOfRunningFunc = func.apply(null, arguments);
              numberOfTimesRan++;
              return resultOfRunningFunc;
          }
          return resultOfRunningFunc;
      }
      return resultOfRunningFunc;
  }
  var column = function(board) {
      var counter = 0;
      var checker = {};      
      for (var i = 0; i < board.length; i++) {
        var key = board[i][counter];
        checker[key] = '';
      }
      counter++;
      if (Object.keys(checker).length !== 9) {
          return "Try again!";
      }
  }

nTimes(9, column);

var result2 = column([[5, 3, 4, 6, 7, 8, 9, 1, 2], 
                      [6, 7, 2, 1, 9, 0, 3, 4, 9],
                      [1, 0, 0, 3, 4, 2, 5, 6, 0],
                      [8, 5, 9, 7, 6, 1, 0, 2, 0],
                      [4, 2, 6, 8, 5, 3, 7, 9, 1],
                      [7, 1, 3, 9, 2, 4, 8, 5, 6],
                      [9, 0, 1, 5, 3, 7, 2, 1, 4],
                      [2, 8, 7, 4, 1, 9, 6, 3, 5],
                      [3, 0, 0, 4, 8, 1, 1, 7, 9]]) //, "Try again!")
console.log(result2)
我是 JavaScript 新手,我正在尝试练习闭包。我想要的是运行列函数 9 次。目前在 nTimes 函数中,函数 func 在列上被调用,并且正确的参数被传入,但 nTimes 只运行一次。关于如何修复它以使其继续运行的任何建议?

标签: javascriptclosures

解决方案


您可以使用nTimes下面使用的函数多次运行一个函数。

function nTimes(count, func) {
  for (x=0;count>=x;x++) {
    func;
  }
}
function testFunc(msg) {
  console.log(msg)
}

nTimes(9, testFunc("Hello World!"));

这是您尝试使用的版本的更简单版本。一旦你使用return代码立即退出函数,你的函数就不起作用了,这意味着它下面的代码不起作用。


推荐阅读