javascript中setInterval方法里面的函数不能够带参数吗,下面这段代码就是一直提示参数无效
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/...
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<script>
window.onload=function()
{
function shake(e,distance,time)
{
var e=document.getElementById(e);
var original=e.style.cssText;
e.style.position="relative"
var start=(new Date()).getTime();
animate();
function animate()
{
var now=(new Date()).getTime();
var jiange=now-start;
var bilv=jiange/time;
if(bilv<1)
{
x=distance*Math.sin(bilv*4*Math.PI)
e.style.left=x+"px"
setTimeout(animate,Math.min(25,time-jiange))
}
else{e.style.cssText=original}
}
}
setInterval(shake("div1",100,2000),2000)
}
</script>
</head>
<body>
<div id="div1" style="background:yellow;height:300px;width:300px;margin-left:400px;"></div>
</body>
</html> 展开
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<script>
window.onload=function()
{
function shake(e,distance,time)
{
var e=document.getElementById(e);
var original=e.style.cssText;
e.style.position="relative"
var start=(new Date()).getTime();
animate();
function animate()
{
var now=(new Date()).getTime();
var jiange=now-start;
var bilv=jiange/time;
if(bilv<1)
{
x=distance*Math.sin(bilv*4*Math.PI)
e.style.left=x+"px"
setTimeout(animate,Math.min(25,time-jiange))
}
else{e.style.cssText=original}
}
}
setInterval(shake("div1",100,2000),2000)
}
</script>
</head>
<body>
<div id="div1" style="background:yellow;height:300px;width:300px;margin-left:400px;"></div>
</body>
</html> 展开
2个回答
展开全部
setInterval的第一个参数应该是函数名:shake,而不是函数调用的形式shake(),如果要传递参数,需要写成“shake('div1', 100, 2000)”,字符串形式。
追问
我照你的方法试了,如果去掉window就可以正常执行。把script代码放到文档后面可以执行,但是为什么加了window.onload就执行不了了呢。这里影响到变量的作用域了还是怎么回事啊
追答
window.onload和onload引用的是一个对象,绝对跟“window”有没有无关,我试了你原来的代码,完全没有问题,这个的原因,可能是现代浏览器作了改进,所以传参数时不用写成字符串形式了(犀牛书有点老了,它说要转字符串)。再看你的问题,不是字符串形式的时候,调用的是window.onload里面的shake(有点像闭包,onload里的shake函数不释放),字符串形式的时候,实际上是调用了eval(),由于window.setInterval(),使用的是window上下文环境下的shake(再准确点就是setInterval里面的shake方法,但你不会把shake定义在setInterval里面吧,你会把shake方法定义在全局环境window下)
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
setInterval将会变相对其第一个参数执行eval,所以如果你想给其中的函数加参数是可以的,但是你要按照eval函数接受的方式,将函数和参数拼接为一个字符串,而不是像正常的函数调用一样
更多追问追答
追问
我照你的方法试了,如果去掉window就可以正常执行。把script代码放到文档后面可以执行,但是为什么加了window.onload就执行不了了呢。这里影响到变量的作用域了还是怎么回事啊
追答
你确定window有onload时间吗?
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询