javascript中颜色不停变化的链接 程序如下:(有一处不理解请博友帮忙解答在线等)
script language="JavaScript">
<!--document.linkColor是设置链接的颜色
function IArray() {
for (var i = 0; i < IArray.arguments.length; i++)
{
this[i] = IArray.arguments[i];
}
this.length = IArray.arguments.length;
}
var colors = new IArray("#ff0000","#0000ff","#00ffff","#cccccc","#000000","#ffff00","#ff0000");
delay = 1.;
link = 0;
vlink = 0;
function linkChange() {
link = ((link+1)%colors.length);
vlink = ((vlink+1)%colors.length);
document.linkColor = colors[link];
document.vlinkColor = colors[vlink];
setTimeout("linkChange()",delay*1000);
}
linkChange();
-->
</script>
<br>
<a href="http://www.sina.com.cn">新浪网</a> <a href="http://www.sohu.com">搜狐</a>
<a href="http://www.163.com">网易</a> <a href="http://www.baidu.com">百度</a>
为什么把倒数第8行“linkChange();”去掉后颜色链接就不变化了?倒数第10行中setTimeout("linkChange()",delay*1000);的这句程序不是会循环调用linkChange()函数吗,后面的linkChange()应该是可以完全去掉啊
function linkChange(){};只是定义了一个函数体,要执行 首先要调用启动, 没有调用怎么会自己运行呢?当运行起来setTimeout("linkChange()",delay*1000)就会定时delay秒后再次执行linkChange(); 所以说倒数第八行是启动执行函数,而倒数第十行是定时执行函数。懂否?
哦哦 ,因为setTimeout是定义在linkChange()函数内部,只要该函数执行一次,就可以通过setTimeout不断循环调用inkChange()函数吧?这样的话,连接颜色应该会不断变化啊,为什么我执行了该段程序后文字连接颜色变化了几次后就不再变化了呢?
linkChange();你去掉这个,setTimeout就不执行,怎么会一直变化呢?
setTimeout("linkChange()",delay*1000); 这句程序不就可以调用linkChange()函数吗?还要加上linkChange()干什么?
@dazhuaoyao: 但是你看这个setTimeout是在linkChange函数里面调用的啊,如果你不调用linkChange函数,怎么执行到setTimeout呢?
@顾晓北: javascript中执行程序不就是从上到下执行一遍吗?我在javascript语句中定义了linkChange()函数,那么该函数必定会侄嫂执行一次吧,而setTimeout是定义在linkChange()函数内部,只要该函数执行一次,就可以通过setTimeout不断循环调用inkChange()函数,我的理解有错误吗?
@dazhuaoyao: 我晕,你只是定义了一个linkChange函数,你不调用不会执行,这个linkChange函数在执行的时候,settimeout一下,就是说,延迟一段时间以后,再执行一次linkChange函数,然后就这样就会一直执行,但是你不执行第一次,那肯定是根本就不开始。
@顾晓北: 哦哦 我好像明白了。多谢哦,不过还有个疑问。就是上面那段程序应该会是循环不断调用linkChange函数的对吧,因此链接的颜色就应该会不停变化,为什么我执行后链接变化了几次后,就不再变化了呢?
@dazhuaoyao: 我试了下,一直在变啊。。。
@顾晓北: 多谢,刚才是自己的问题,现在一切都明白了,已采纳。
setTimeout的使用方法: setTimeout("javascript语句", 毫秒),所以你去掉了肯定不会再执行了
我的意思是保留setTimeout("linkChange()",delay*1000);这句不变,去掉下面一行的单独的linkChange();语句。而且linkChange()函数已经在上面定义了,不是吗?
@dazhuaoyao: 确实的settimeout 是在linkchange里面执行的 你肯定得调用他后才会实现sertimeout的
function IArray() { for (var i = 0; i < IArray.arguments.length; i++) { this[i] = IArray.arguments[i]; } this.length = IArray.arguments.length; } var colors = new IArray("#ff0000", "#0000ff", "#00ffff", "#cccccc", "#000000", "#ffff00", "#ff0000"); delay = 1.; link = 0; vlink = 0; function linkChange() { link = ((link + 1) % colors.length); vlink = ((vlink + 1) % colors.length); document.linkColor = colors[link]; document.vlinkColor = colors[vlink]; //setTimeout是在指定的时间后,将代码段加入js的执行队列。而且只加入一次。 //可以用另外一个setInterval来实现每间隔指定时间,将代码段加入js的执行队列 setTimeout("linkChange()", delay * 1000); } linkChange(); //方法申明了,不代表被被自动调用。所以linkChange不能去掉。