<head>
<script type="text/javascript">
<!--
function Redirect()
{
window.location="http://www.newlocation.com";
}
document.write("You will be redirected to main page in 10 sec.");
setTimeout('Redirect()', 10000);
//-->
</script>
</head>
1.这里我的问题是在settimeout方法内部我们如何使用函数来调用,如果我们在单引号内使用字符串文字我认为这表示写出精确的结果,如document.write("hello");
现在结果将因为它在字符串里面。如果javascript可以理解setTimeout('Redirect()', 10000);
'redirect()'作为方法,而不是按原样编写它。
<head>
<script type="text/javascript">
<!--
function Redirect() {
window.location="http://www.tutorialspoint.com";
}
document.write("You will be redirected to our main page in 10 seconds!");
setTimeout(Redirect(), 10000);
//-->
</script>
</head>
<body>
</body>
</html>
2.当我这样做setTimeout(Redirect(), 10000);
时,它不起作用......它开始直接重定向页面,而不是使用该settimeout ...
答案 0 :(得分:2)
我们必须只传递函数名称(不带括号),如下所示:
setTimeout(Redirect, 10000);
它会起作用。
答案 1 :(得分:0)
您的代码立即调用Redirect()
的原因是因为在setTimeout
运行时会对其进行评估。
你可以做些什么来减轻这种情况,就是传递一个匿名函数来包装方法。像这样:setTimeout(function(){ Redirect(); }, 10000);
此链接说明了为什么您的字符串"Redirect()"
会按照您的预期进行评估。简而言之(取自链接):使用eval
在全局上下文中计算字符串文字。
WindowTimers.setTimeout()
答案 2 :(得分:0)
您的代码立即调用Redirect()的原因是因为解释器首先运行内部代码,在括号内运行以便获取函数/代码返回的内容,请查看此代码
<script>
var x=2;
if(x=1)
alert("yes!");
</script>
浏览器会显示是! , 这是为什么?为什么我们使用==而不是=? 让我们回到你的代码; 如果你的函数在结尾处返回一个字符串怎么办?看看这个:
<script type="text/javascript">
var i=0;
function Redirect() {
i++;
document.write("redirect url : http://www.tutorialspoint.com?"+i.toString());
return "Redirect()";
}
var a=setTimeout(Redirect(), 1000);
</script>
将会发生什么?...
这就是为什么我们使用setTimeout(“javascript_function”,毫秒);