Javascript 函数引用
我有一个简短的问题,非常简单,请尝试简化答案,因为我是JS的新手。问题是,为什么setTimeout中的函数需要“”按预期运行,这意味着它每5秒触发一次自身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,这是不好的。但是如果它是引号
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