在Javascript中将函数作为参数传递

在Javascript中将函数作为参数传递,javascript,function,arguments,Javascript,Function,Arguments,我真的在为这件事挣扎——当然我错过了一些简单的东西 代码如下:- function webcamupdate(webcamurl) { alert("I am a function to update the webcam with the url "+webcamurl); } function countdown(callback) { alert(callback); setTimeout("callback()", 10000); } var theurl =

我真的在为这件事挣扎——当然我错过了一些简单的东西

代码如下:-

function webcamupdate(webcamurl) {
    alert("I am a function to update the webcam with the url "+webcamurl);
}

function countdown(callback) {
    alert(callback);
    setTimeout("callback()", 10000);
}

var theurl = "THIS IS THE URL";

countdown(function(){ webcamupdate(theurl); });
function webcamupdate(webcamurl) {
    alert("I am a function to update the webcam with the url "+webcamurl);
}

function countdown(callback) {
    alert(callback);
    setTimeout(callback, 10000);
}

var theurl = "THIS IS THE URL";

countdown(function(){ webcamupdate(theurl); });
正如你所看到的,我正在尝试创建一个倒计时函数(还有更多的代码,不过我刚刚发布了一些基础知识),它将在10秒后运行一个函数(在本例中是更新网络摄像头)

如果函数没有参数,则所有操作都正常,但是Condown函数中的警报(回调)返回以下内容:-

函数(){webcamupdate(theurl);}

当webcamupdate函数在未定义“webcamurl”的情况下运行时,这当然会使脚本崩溃

警报(回调)实际上需要说明的是:-

函数(){webcamupdate(“这是URL”);}

i、 它在将参数“theurl”与函数一起传递之前对其求值

任何想法都将不胜感激

编辑

我想我可能误导了你,我使用的是警报而不是函数(我只是想让它保持简单!)

这是原始代码(仍然减少了,但给了您更好的想法)

基本上,倒计时函数很重要-它需要3个参数-倒计时时间(以秒为单位)、显示倒计时的DOM元素和超时时运行的函数

如果第三个参数(函数)没有自己的任何参数,例如webcam(),它可以正常工作,但是当我们尝试添加webcam(“webcampic.jpg”)时,由于函数尝试运行webcam(url)而不是webcam(“webcampic.jpg”),所以它无法工作

显然,最简单的解决方案就是将url设为全局变量,但这不是一个好的做法,会阻止我通过js文件在其他页面上使用倒计时代码。
救命啊

只需从
callback()
更改为传递函数引用即可

实际上,您希望返回函数,以便
setTimeout(callback,10000)的行为符合预期。当您在Javascript中向函数发出警报时,它与
警报(callback.toString())
相同,以获取函数头和函数体的完整字符串版本

有趣的是,如果您在
setTimeout()
之前警告回调,那么回调似乎从未触发过。如果您注释掉第一个警报,或者在设置超时后注释掉警报,那么它就可以正常工作。我只在Chrome上测试过,所以我想我还需要做更多的研究


无论哪种方式,在函数实际被调用之前,都不能让javascript解析(或处理)函数的参数。您可以在
countDown()
中使用匿名回调来提醒url本身。

好了,各位,我终于自己解决了,下面是其他人的解决方案

首先创建一个返回函数的函数:

function createfunctionwebcamupdate(url) {
    return function(){ webcamupdate(url); };
}
function(){ webcamupdatefunction(); }
然后设置一个变量,在调用函数时触发该函数:

webcamupdatefunction = createfunctionwebcamupdate(url);
然后将此新变量称为回调函数:

function createfunctionwebcamupdate(url) {
    return function(){ webcamupdate(url); };
}
function(){ webcamupdatefunction(); }
调用变量时,Javascript显然会记住
createfunction
部分中存储的变量


希望这能有所帮助。

“什么警报(回调)实际上需要说…”JavaScript不是这样工作的。那么,当所有的警报都说了和做了之后,警报应该说什么呢?谢谢各位,我将在周末看一看。然而,我认为我可能过度简化了示例&误导了您——我将看看a是否可以添加更多的代码来进一步解释。