js 有多线程吗? 以前看过一个帖子,是那个人用setTimeout模拟的,js本身没有真正的多线程。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 如楼上所说。可以使用以下两个脚本来测试:setTimeout(function(){alert(1);},1);alert(2);显示次序为2,1alert(1);alert(2);显示次序为1,2第一个脚本显示次序为2,1说明setTimeout是不用等执行完,就可以执行下一句的(形式上跟多线程一样),但是同时,2和1没有同时出现,说明并不存在真正的多线程。 要看js引擎的宿主在哪里,如果是在ie下可以用setTimeout起一个Timer线程,类似如果是在WSH下可用WScript.Sleep.Windows平台下,可借助COM组件实现多线程,并在每个Thread里跑代码。 我遇到过一个问题,不知道算不算是多线程 下面是我的代码: function raiseDiv(){ if(!area){ return ; } var divTop = parseInt(area.offsetTop); area.style.top = divTop - 10 + "px"; if(divTop <= 40){ area.style.top = divTop + "px"; //area.removeChild(area.lastChild); area.style.display = "none"; setTimeout(fallDiv,500); return ; } setTimeout(raiseDiv,2); } function fallDiv(){ if(!area){ return ; } childArea.style.display = "block"; area.style.display = "block"; area.appendChild(childArea); var divTop = parseInt(area.offsetTop); area.style.top = divTop + 10 + "px"; if(divTop >= 280){ area.style.top = divTop + "px"; return ; } setTimeout(fallDiv,10); }我想实现的效果就是通过一个按钮,点击后先让DIV上去,再下来一个。如果反复的点的话好象就在我设置的时间内又执行了一个方法。 我也不知道这算不算是多线程,请指教…… 我遇到过一个问题,不知道算不算是多线程 下面是我的代码: function raiseDiv(){ if(!area){ return ; } var divTop = parseInt(area.offsetTop); area.style.top = divTop - 10 + "px"; if(divTop <= 40){ area.style.top = divTop + "px"; //area.removeChild(area.lastChild); area.style.display = "none"; setTimeout(fallDiv,500); return ; } setTimeout(raiseDiv,2); } function fallDiv(){ if(!area){ return ; } childArea.style.display = "block"; area.style.display = "block"; area.appendChild(childArea); var divTop = parseInt(area.offsetTop); area.style.top = divTop + 10 + "px"; if(divTop >= 280){ area.style.top = divTop + "px"; return ; } setTimeout(fallDiv,10); }我想实现的效果就是通过一个按钮,点击后先让DIV上去,再下来一个。如果反复的点的话好象就在我设置的时间内又执行了一个方法。 我也不知道这算不算是多线程,请指教…… http://topic.csdn.net/u/20081102/15/a0c3d335-0473-42c0-868d-6bc948fb5de5.html 以前见过一个javascript的多线程库,他把用户定义的function重新解析,分成N个原子function,然后有一个线程容器来调度。这基本上算是真正意义的多线程了。使用timeout之类的说是多线程的先去看看线程应该具备的特性吧。 请教 :那用timeout来实现的时候,有时候在timeout等待时间内又开始了同一个timeout是怎么一回事啊? 谢谢…… 这么说吧,从根本上来讲,在JavaScript中,除了window.alert/prompt之类这种本地代码实现的方法之外,不存在中断,并且函数是不可再分的,没有机制将它分解成时间片。这也就是为什么不存在多线程的本质。你写一个function(){...}是不可能在这个函数执行到一半的时候终止它的,无论用任何方式(除了用alert之类)。如果你这样写:vat t1 = window.setTimout(function(){},1)var t2 = window.setTimout(function(){},2)其本质也是在1毫秒之后调用t1的方法,然后执行它,然后2毫秒之后执行t2。但是如果t1这里还没执行完(比如一个死循环),则t2就不会执行的。所以本质上来说,不存在两个同时执行的过程。除非你将一个function写成n个原子function,然后手工调度他们。这就是我说的那个线程库的基本原理。不过建议你还是考虑一下为什么要在js中使用多线程以及他的必要性。 sencha touch 2.0 中Ext.msg.alert调用后页面不能正常恢复. 有人会用JS获取当前Iframe的宽度和高度么? 求熟悉gecko DOM的朋友帮忙解释下这段代码100分 用js代码做弹出新窗口,这个窗口的编码如何设置?? 不好意思 又来麻烦大家一点JS兼容的问题 请问:如何设定confirm("")的默认选项为"取消"? 这人JAVA的计数器怎么改???????? 向文本框的文字插入的问提 大侠们,有没有各种Javascript方法的使用参考说明,谢谢了先 滚动文本框的高度自动变长!!! 【编程游戏】贺岁放礼花。(第一名奖励10000可用分) 页面跳转的一个问题
可以使用以下两个脚本来测试:setTimeout(function(){alert(1);},1);
alert(2);
显示次序为2,1alert(1);
alert(2);
显示次序为1,2第一个脚本显示次序为2,1说明setTimeout是不用等执行完,就可以执行下一句的(形式上跟多线程一样),但是同时,2和1没有同时出现,说明并不存在真正的多线程。
Windows平台下,可借助COM组件实现多线程,并在每个Thread里跑代码。
下面是我的代码:
function raiseDiv(){
if(!area){
return ;
}
var divTop = parseInt(area.offsetTop);
area.style.top = divTop - 10 + "px";
if(divTop <= 40){
area.style.top = divTop + "px";
//area.removeChild(area.lastChild);
area.style.display = "none";
setTimeout(fallDiv,500);
return ;
}
setTimeout(raiseDiv,2);
}
function fallDiv(){
if(!area){
return ;
}
childArea.style.display = "block";
area.style.display = "block";
area.appendChild(childArea);
var divTop = parseInt(area.offsetTop);
area.style.top = divTop + 10 + "px";
if(divTop >= 280){
area.style.top = divTop + "px";
return ;
}
setTimeout(fallDiv,10);
}
我想实现的效果就是通过一个按钮,点击后先让DIV上去,再下来一个。如果反复的点的话好象就在我设置的时间内又执行了一个方法。
我也不知道这算不算是多线程,请指教……
下面是我的代码:
function raiseDiv(){
if(!area){
return ;
}
var divTop = parseInt(area.offsetTop);
area.style.top = divTop - 10 + "px";
if(divTop <= 40){
area.style.top = divTop + "px";
//area.removeChild(area.lastChild);
area.style.display = "none";
setTimeout(fallDiv,500);
return ;
}
setTimeout(raiseDiv,2);
}
function fallDiv(){
if(!area){
return ;
}
childArea.style.display = "block";
area.style.display = "block";
area.appendChild(childArea);
var divTop = parseInt(area.offsetTop);
area.style.top = divTop + 10 + "px";
if(divTop >= 280){
area.style.top = divTop + "px";
return ;
}
setTimeout(fallDiv,10);
}
我想实现的效果就是通过一个按钮,点击后先让DIV上去,再下来一个。如果反复的点的话好象就在我设置的时间内又执行了一个方法。
我也不知道这算不算是多线程,请指教……
使用timeout之类的说是多线程的先去看看线程应该具备的特性吧。
这么说吧,从根本上来讲,在JavaScript中,除了window.alert/prompt之类这种本地代码实现的方法之外,不存在中断,并且函数是不可再分的,没有机制将它分解成时间片。这也就是为什么不存在多线程的本质。
你写一个function(){...}是不可能在这个函数执行到一半的时候终止它的,无论用任何方式(除了用alert之类)。
如果你这样写:
vat t1 = window.setTimout(function(){},1)
var t2 = window.setTimout(function(){},2)
其本质也是在1毫秒之后调用t1的方法,然后执行它,然后2毫秒之后执行t2。但是如果t1这里还没执行完(比如一个死循环),则t2就不会执行的。所以本质上来说,不存在两个同时执行的过程。
除非你将一个function写成n个原子function,然后手工调度他们。这就是我说的那个线程库的基本原理。
不过建议你还是考虑一下为什么要在js中使用多线程以及他的必要性。