我的思路是能够让它实现抖动,如接受到了一个信息等时的情景,但是抱错。
其实java脚本我是不太懂的!!
其实java脚本我是不太懂的!!
解决方案 »
- JS判断输入为空为什么不成功
- 我的js在ie6下 在点击的时候 dom第一次能加载上 第2次dom消失了 是怎么回事??
- div
- jQuery代码说缺少分号,这是怎么回事?
- 如何使下拉菜单的值根据文本框的值实时改变而改变??
- 发表下自己的意见:如何快速用正则表达式来清除HTML标志?
- 请问: javascript 语句 在html文件中能判断 文件存在吗? 是不是不行呀??? [asp 又一个 Filesystemscrpt 啥动动?] 我急需用 java
- 关于获得对象顶边距问题
- 2个关于javascript对象的菜鸟问题。最后5分了5555
- 上次结贴早了
- 100分送上,各位神仙,谁能给兄弟俺提供个JAVASCRIPT的开发手册。PDF格式的。
- 自己写的程序,有问题!在线等!急!
setTimeout(show(obj),5000)
setTimeout的code参数应为函数指针或执行代码字符串。
作为函数指针时无法带参数。作为代码字符串时传递的参数只能是常数或者全局变量。
obj在这里是function的参数变量,在window作用域上没有定义。2: 错误
<div id="d1" display="">应为<div id="d1" style="display:''">3: 出错过程解释:
setTimeout(show(obj),5000)在解析的时候发现code参数的值是一个函数调用“show(obj)”,于是脚本引擎试图调用这个函数后获得函数返回的值来作为函数指针传给setTimeout函数。但是在调用过程中再次遇到这个语句,于是再次试图获得函数指针……如果没有堆栈限制的话你就在死循环中死机了。
<head>
<script type="text/javascript">
function show(obj)
{ d1.style.display="none"
setTimeout(show(),5000)
}
</script>
</head>
<body onload="show()">
<div id="d1" style="display:''">
<font color="red">▲</font>
</div>
</body>
</html>
我改成这样还是报错???
<head>
</head>
<body onload="setInterval('ob.style.display=ob.style.display==\'\'?\'none\':\'\'',50);">
<div id="d1" display="">
<font color="red">▲</font>
</div>
<script type="text/javascript">
ob=document.all("d1");
</script>
</body>
</html>
<head>
<script type="text/javascript">
function show(obj)
{
obj.style.display="none"
setTimeout("show(d1)",5000)
}
</script>
</head>
<body onload="show(d1)">
<div id="d1" display="">
<font color="red">▲</font>
</div>
</body>
</html>
js解决setTimeout应该和队列和栈没有深关系。队列是fifo的,堆栈是lifo的,setTimeout是看你set到了什么时候的。js中函数可视为对象,对函数的引用也可视为指针。
setTimeout("show(d1)",5000)是在5000毫秒后运行“show(d1)”这个语句(表达式)setTimeout(show,5000)是setTimeout的第二种用法,因为show本身就是一个函数指针(引用),所以被安排在5000毫秒后调用它所指向的函数。setTimeout(show(d1),5000)是马上运行这“show(d1)”这个表达式后尝试把结果当成函数指针来排队,如果show(d1)能够返回函数指针或者表达式就没问题,像这样(show返回函数):
function show(a){
return new Function("alert(\""+a+"\")");
}
setTimeout(show("hello"),1000);或者这样(show返回表达式):
function show(a){
return ("alert(\""+a+"\")");
}
setTimeout(show("hello"),1000);堆栈错误出在楼主在show函数里面的setTimeout语句又递归调用了show函数的执行结果,而不是show函数本身。
队列是fifo的,"堆栈是lifo的!",概念混淆:)堆和栈天壤之别呦偶想不通啥叫set?事实上,搂住的错误是显而易见的,我只是想说为什么这种错误的使用函数会出现溢出
查了下网上:
堆是一个完全二叉树,可以用一维数组来实现。堆中存储的数是局部有序的。有两种不同的堆:最大值堆和最小值堆。最大值堆的任意一个结点的值都大于或等于其任意一个子结点存储的值。查了下金山,堆:heap,栈,或者叫堆栈:stack。
stack
[stAk;stAk ]
(堆)栈;[堆叠,叠式储存器]
A reserved area of memory where the CPU automatically saves the program counter and the contents of working registers when a program interrupt occurs. The stack normally forces users to return from interrupts in the same order that interrupts occurred.
内存中的一块留用存储区,当程序中断产生时,CPU自动在其中保存程序计数器和工作寄存器的内容。栈通常迫使用户程序以中断发生的同样顺序从中断点返回。
Generally, a block of successive memory locations that are accessible from one end of a last-in/first-out(LIFO) basis. The stack is coordinated with a stack pointer that keeps track of storage and retrieval of each byte or word of information in the stack. A stack may be any block of successive information locations in a read/write memory.
通常情况下,一种连续的存储单元区,从一端按后进先出的原则可对这些单元进行存取。栈和一个栈指针配合工作,栈指针随时指示要存取的每个字或字节信息在栈中的位置。栈可以是读写存储器中任意的地址连续的存储单元块。
堆的概念好像只在堆排序里面见过。而把栈叫堆栈向来如此,不算概念混淆吧?
错用成setTimeout(show(obj),5000)
产生栈溢出,很正常啊加了两句注释后
可以很清楚看清溢出的过程:
<html>
<head>
<script type="text/javascript">
var i=0;
function show(obj)
{ obj.style.display="none";
alert(i++);
if(i>10) return "alert('OK')";
setTimeout(show(obj),5000)
return "alert('"+i+"')";
}
</script>
</head>
<body onload="alert(show(d1))">
<div id="d1" display="">
<font color="red">▲</font>
</div>
</body>
</html>
“我说“setTimeout是看你set到了什么时候的”的意思是setTimeout是根据你设置的时间值来决定什么时候调用函数或执行语句(表达式的),跟设置的前后顺序无关。
”这句话不知道你是从哪里看到的,不知道你可知道消息队列,当一个Timeout消息被post时,进入队列等待系统处理,当然和语句的物理位置是无关的,timeout给人的感觉象是一个线程,当然她不是。
setTimeout("alert(1)",500)
setTimeout("alert(2)",1000)
for (t=(new Date());(new Date())-t<2000;)status=(new Date())-t试试调整各个setTiemout的顺序看看?