如何使用Javascript函数作为另一个函数的参数?
每当我尝试在Chromium中运行此函数时,都会收到错误消息uncaughttypeerror:invalical invocation。为什么会发生这种情况,我如何解决它如何使用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
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知识很少。