如何使用Javascript函数作为另一个函数的参数?

如何使用Javascript函数作为另一个函数的参数?,javascript,Javascript,每当我尝试在Chromium中运行此函数时,都会收到错误消息uncaughttypeerror:invalical invocation。为什么会发生这种情况,我如何解决它 getOutput([alert], ["Hi!", "Hello!", "Lolwut?"]); //why doesn't this call "alert" //for each of the arguments? //this function is supposed to return the output of

每当我尝试在Chromium中运行此函数时,都会收到错误消息uncaughttypeerror:invalical invocation。为什么会发生这种情况,我如何解决它

getOutput([alert], ["Hi!", "Hello!", "Lolwut?"]); //why doesn't this call "alert"
//for each of the arguments?

//this function is supposed to return the output of each function for each argument.
function getOutput(functions, arguments){
    for(var i = 0; i < functions.length; i++){
        for(var j = 0; j < arguments.length; j++){
            functions[i](arguments[j]); //why doesn't this call the function
        }
    }    
}​
编辑:

虽然这里给出的修复方法有效,但原因似乎正如rbtLong所建议的那样,即在其上下文之外调用了本机函数alert。使用这样的包装器:

function F(arg) {alert(arg);}
代替代码中的警报,按原样运行代码。尽管如此,如果您希望有一个可以接受本机函数的通用函数,下面建议的修复仍然有效

顺便说一句:Safari和Firefox也有同样的情况

这似乎与数组访问构造不允许在它之后调用有关。也许很像你不能做的1.toString。您可以这样快速修复它:

getOutput([alert], ["Hi!", "Hello!", "Lolwut?"]);

function getOutput(functions, arguments){
    for(var i = 0; i < functions.length; i++){
        for(var j = 0; j < arguments.length; j++){
            var f = functions[i];
            f(arguments[j]);
        }
    }    
}​
编辑:

虽然这里给出的修复方法有效,但原因似乎正如rbtLong所建议的那样,即在其上下文之外调用了本机函数alert。使用这样的包装器:

function F(arg) {alert(arg);}
代替代码中的警报,按原样运行代码。尽管如此,如果您希望有一个可以接受本机函数的通用函数,下面建议的修复仍然有效

顺便说一句:Safari和Firefox也有同样的情况

这似乎与数组访问构造不允许在它之后调用有关。也许很像你不能做的1.toString。您可以这样快速修复它:

getOutput([alert], ["Hi!", "Hello!", "Lolwut?"]);

function getOutput(functions, arguments){
    for(var i = 0; i < functions.length; i++){
        for(var j = 0; j < arguments.length; j++){
            var f = functions[i];
            f(arguments[j]);
        }
    }    
}​

我相信会是这样的:

fun1fun2'lol'

还是艰难的道路

var hi7=fun2'lol'


fun1hi7

我相信会是这样的:

fun1fun2'lol'

还是艰难的道路

var hi7=fun2'lol'


fun1hi7

我相信这是因为您在其上下文之外调用对象,这里描述的method.callargs应该允许这样做

functions[i].call(this, arguments[j])

我相信这是因为您在其上下文之外调用对象,这里描述的method.callargs应该允许这样做

functions[i].call(this, arguments[j])

你是说:

function getOutput(fn, args) { 
 for(var f = 0; f < fn.length; f++){
    for(var j = 0; j < args.length; j++){
        fun = fn[f];
        fun.call(this, args[j]);
    }
  }

}
getOutput([alert], ["Hi!", "Hello!", "Lolwut?"]);

你是说:

function getOutput(fn, args) { 
 for(var f = 0; f < fn.length; f++){
    for(var j = 0; j < args.length; j++){
        fun = fn[f];
        fun.call(this, args[j]);
    }
  }

}
getOutput([alert], ["Hi!", "Hello!", "Lolwut?"]);


我相信。基本上,它又回到了作用域。@JacquesChester它似乎解决了一个稍微不同的问题-我特别尝试从数组的特定索引调用函数。我认为最大的问题是,您试图从数组的特定索引调用本机函数。调用getOutput[functionmsg{alertmsg;}],[Hi!Hello!Lolwut?]有效。@AndersonGreen如果您查看接受的答案,它的基本逻辑与我链接的相同。我很高兴在这一点上给matehat一个肯定的评价,他不厌其烦地写了一个答案:我相信。基本上,它又回到了作用域。@JacquesChester它似乎解决了一个稍微不同的问题-我特别尝试从数组的特定索引调用函数。我认为最大的问题是,您试图从数组的特定索引调用本机函数。调用getOutput[functionmsg{alertmsg;}],[Hi!Hello!Lolwut?]有效。@AndersonGreen如果您查看接受的答案,它的基本逻辑与我链接的相同。我很高兴给matehat这个荣誉,他费心写了一个答案:在它周围加一个括号可能太有用了,函数[I]参数[I];我只是尝试了一下,但不幸的是没有。这就是我要首先发布的内容。[提醒][0]你好!;引发相同的错误。可能是[alert][0]。callnull,参数[j]?只是为了尝试其他选择,hahaIt做到了!但我想财产访问结构必须要起作用。否则它会破坏很多站点:在它周围放一个括号可能会对函数[i]参数[i]起作用;我只是尝试了一下,但不幸的是没有。这就是我要首先发布的内容。[提醒][0]你好!;引发相同的错误。可能是[alert][0]。callnull,参数[j]?只是为了尝试其他选择,hahaIt做到了!但我想财产访问结构必须要起作用。否则它会破坏很多网站:我看不出这有什么关系-你能进一步解释吗?问题是如何在函数参数中使用函数的输出不,问题是如何使用指向实际函数的指针作为参数。哦,对不起,JS知识很少。我看不出这有什么关系-你能进一步解释吗?问题是如何在函数参数中使用函数的输出。不,问题是如何使用指向实际函数的指针作为参数。哦,对不起,JS知识很少。