Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 函数引用_Javascript - Fatal编程技术网

Javascript 函数引用

Javascript 函数引用,javascript,Javascript,我有一个简短的问题,非常简单,请尝试简化答案,因为我是JS的新手。问题是,为什么setTimeout中的函数需要“”按预期运行,这意味着它每5秒触发一次自身 var pal = document.getElementById("pal"); c=0; function Tr(){ pal.innerHTML=c; c=c+1; setTimeout("Tr()", 5000); } 它不需要在引号中。但如果它是引号,那么它就是evaled,这是不好的。但是如果它是引号

我有一个简短的问题,非常简单,请尝试简化答案,因为我是JS的新手。问题是,为什么setTimeout中的函数需要“”按预期运行,这意味着它每5秒触发一次自身

var pal = document.getElementById("pal");
c=0;

function Tr(){
    pal.innerHTML=c;
    c=c+1;
    setTimeout("Tr()", 5000);
}

它不需要在引号中。但如果它是引号,那么它就是
eval
ed,这是不好的。但是如果它是引号,它需要
()
,但是如果它不是字符串,那么它就不应该有它

您可以简单地执行以下操作:

setTimeout(Tr, 5000);
setTimeout
接收要作为参数执行的函数。如果通过函数名传递,则直接调用,但如果给定字符串,则将使用
eval
对其求值


不要使用字符串,因为它使用
eval
,这是邪恶的

它不需要在引号中。但如果它是引号,那么它就是
eval
ed,这是不好的。但是如果它是引号,它需要
()
,但是如果它不是字符串,那么它就不应该有它

您可以简单地执行以下操作:

setTimeout(Tr, 5000);
setTimeout
接收要作为参数执行的函数。如果通过函数名传递,则直接调用,但如果给定字符串,则将使用
eval
对其求值


不要使用字符串,因为它使用
eval
,这是邪恶的

它不需要在引号中。但如果它是引号,那么它就是
eval
ed,这是不好的。但是如果它是引号,它需要
()
,但是如果它不是字符串,那么它就不应该有它

您可以简单地执行以下操作:

setTimeout(Tr, 5000);
setTimeout
接收要作为参数执行的函数。如果通过函数名传递,则直接调用,但如果给定字符串,则将使用
eval
对其求值


不要使用字符串,因为它使用
eval
,这是邪恶的

它不需要在引号中。但如果它是引号,那么它就是
eval
ed,这是不好的。但是如果它是引号,它需要
()
,但是如果它不是字符串,那么它就不应该有它

您可以简单地执行以下操作:

setTimeout(Tr, 5000);
setTimeout
接收要作为参数执行的函数。如果通过函数名传递,则直接调用,但如果给定字符串,则将使用
eval
对其求值


不要使用字符串,因为它使用
eval
,这是邪恶的

因为与其他语言(如c#)相反,在JavaScript中,您不能以参数作为参数传递函数调用。不过,您可以传递一个无参数函数

传入一个字符串,该字符串包含参数化函数调用或要执行的多个函数,引擎在运行时对此进行计算


请参阅以查看是否可以使用无参数函数作为参数。

因为与其他语言(如c#)相反,在JavaScript中无法传递参数为参数的函数调用。不过,您可以传递一个无参数函数

传入一个字符串,该字符串包含参数化函数调用或要执行的多个函数,引擎在运行时对此进行计算


请参阅以查看是否可以使用无参数函数作为参数。

因为与其他语言(如c#)相反,在JavaScript中无法传递参数为参数的函数调用。不过,您可以传递一个无参数函数

传入一个字符串,该字符串包含参数化函数调用或要执行的多个函数,引擎在运行时对此进行计算


请参阅以查看是否可以使用无参数函数作为参数。

因为与其他语言(如c#)相反,在JavaScript中无法传递参数为参数的函数调用。不过,您可以传递一个无参数函数

传入一个字符串,该字符串包含参数化函数调用或要执行的多个函数,引擎在运行时对此进行计算


请参阅以查看是否可以使用无参数函数作为参数。

它没有,事实上,不建议在引号中使用它,因为它使用了
eval()

:

其中
timeoutID
是超时的数字ID,稍后可与window.clearTimeout()一起使用。
func
是要在延迟毫秒后执行的函数。
备选语法中的
code
是要在延迟毫秒后执行的代码字符串(由于与使用
eval()
相同的原因,不建议使用此语法)

因此使用函数

setTimeout(Tr, 5000)

这两种方法都一样好

如果您想在调用中使用参数,可以使用带有匿名函数的后者-例如:

var foo = 'bar';
setTimeout(function() { Tr('foo' + foo); }); // Will call Tr('foobar')

原因是什么

setTimeout(Tr(), 5000)

不起作用是因为它首先执行
Tr()
,然后调用
setTimeout
,得到结果。如果
Tr()
返回字符串
'foo'
,此调用将调用
setTimeout('foo',5000)
,这毫无意义。

它没有,事实上不建议在引号中使用它,因为它使用
eval()

:

其中
timeoutID
是超时的数字ID,稍后可与window.clearTimeout()一起使用。
func
是要在延迟毫秒后执行的函数。
备选语法中的
code
是要在延迟毫秒后执行的代码字符串(由于与使用
eval()
相同的原因,不建议使用此语法)

因此使用函数

setTimeout(Tr, 5000)

这两种方法都一样好

如果您想在调用中使用参数,可以使用带有匿名函数的后者-例如:

var foo = 'bar';
setTimeout(function() { Tr('foo' + foo); }); // Will call Tr('foobar')

原因是什么

setTimeout(Tr(), 5000)
不起作用是因为它首先执行
Tr()
,然后执行c