javascript - 传入函数数组作为参数,对于函数中的每个函数运行该函数

标签 javascript arrays function

我试图将函数数组作为参数传递给函数 x,然后在函数 x 中执行它们。我也会以某种方式传递参数,但某些参数仅在函数 x 中初始化。

一些功能包括:

_showData(data,type);
console.log(data);
$('#loading').remove();

这是一个示例:

// Called somewhere else 
runFunctions([$('.dashboard').remove, $('.screen-loading').remove]);

var runFunctions = function(functions){
  // do some things
  for (var i = 0; i < functions.length; i++){
     functions[i]();
}

有什么想法吗?

编辑: 抱歉,我刚刚意识到程序不知道对象是什么,因为我正在使用 ajax 调用更改范围。

var runFunctions = function(functions){
  $.ajax({
    method: "POST",
    url: "php/database.php",
    dataType: "JSON",
    data: {type:type},
    success: function(data, type){
      for (var i = 0; i < functions.length; i++){
        functions[i]();
      }
    }
  })
}

<罢工>

这个怎么样:

  _accessDatabase( 
    function(onSuccess){
      $('.dashboard').remove();
      var type = 'home';
      _showData(data,type); // it doesn't know what data is, how can I pass it through?
      $('.screen-loading').remove();
    }
  );


var _accessDatabase = function(onSuccess){
  $.ajax({
    method: "POST",
    url: "php/database.php",
    dataType: "JSON",
    data: {},
    success: function(data){
      onSuccess(data); 
    }
  })
}

我想将 var 数据传递给 onSuccess 函数,我该怎么做?

解决方法:

var _request_successful = function onSuccess (data){
  console.log("running onSuccess");
  $('.dashboard').remove();
  var type = 'home';
  _showData(data,type);
  $('.screen-loading').remove();
}

_accessDatabase(_request_successful);


var _accessDatabase = function(onSuccess){
  $.ajax({
    method: "POST",
    url: "php/database.php",
    dataType: "JSON",
    data: {},
    success: function(data){
      onSuccess(data); 
    }
  })
}   

最佳答案

这段代码的问题是您在 forLoop 中调用的函数没有绑定(bind)到任何东西。就用这个吧。

// Called somewhere else 
runFunctions([
  $('.dashboard').remove.bind($('.dashboard'))
, $('.screen-loading').remove.bind($('.screen-loading'))
]);

function runFunctions(functions){
  // do some things
  for (var i = 0; i < functions.length; i++){
     console.log("running")
     functions[i]();
  }
}

你可以这样做:

function call(method, objs) {
  objs.forEach(function (obj) {
     obj[method]()
  })
}
call('remove', [$('.dashboard'), $('.screen-loading')])

这是一个工作 fiddle :https://jsfiddle.net/ogfgocp4/

为了解释一下它是如何工作的,我不太清楚 JavaScript 的内部结构,但是当你这样做时:$('.dashboard').remove,它会返回 删除功能。如果您立即调用它,它将绑定(bind)到为您提供该方法的对象。如果你将它影响到其他东西,那么它将绑定(bind)到调用它的对象。

我想这里有一小段代码可以很好地解释它。

var obj = {
    fun: function () {
    console.log(this)
  }
}
var fun2 = {
    a: 1
}

//this -> obj
obj.fun()

// this -> window
fun = obj.fun
fun()

// this -> fun2
fun2.fun = obj.fun
fun2.fun()

当你调用obj.fun时,this将是对象obj。当您影响 var 的方法时,this 就会变成 window,因为它是此范围内的默认对象。然后,如果我们最终将该函数绑定(bind)到对象 fun2 并立即调用它,则 this 现在就是对象 fun2

关于javascript - 传入函数数组作为参数,对于函数中的每个函数运行该函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35076965/

相关文章:

javascript - enzyme 试轮事件

javascript - 如何配置使用 createServer 创建的服务器以在已创建时填充 cors?

c - 在C中用树初始化结构的全局数组

java - 斐波那契数列中 f(93) 处的数字为负值,怎么办?

swift - 交换键和值的字典扩展 - Swift 4.1

function - 在 Lisp 中,如何通过作为参数传递的名称从宏中调用函数?

javascript - 转义 javascript 中的正则表达式特殊字符,但仍保留匹配关键字的字符串完整性

关于排序功能的 Javascript 语法帮助

javascript - 试图从 javascript map 结果中隐藏 "undefined"

python - 如何在Python中使用递归函数找到最大公约数?