js如何判断某个函数是否执行完?
document.getElementById("msgdiv").appendChild(thObj);
document.getElementById("msgdiv").appendChild(bodyObj);
changeMsg是个时间比较长的函数,我想等它执行完之后再执行下面的代码,但是如何判断它是否执行完呢?
改成这样还不行:
if(changeMsg()==1){
GetId("msgdiv").appendChild(thObj);
GetId("msgdiv").appendChild(bodyObj);}
function changeMsg()
{
$("msgdiv").style.width=parseInt($("msgdiv").style.width)+ 20+"px";
$("msgdiv").style.height=parseInt($("msgdiv").style.height)+ 15+"px";
if(parseInt($("msgdiv").style.width)<200)
{
setTimeout("changeMsg()",30);
}
else
{
//fd=1;
//AlertMsg(etitle,econtent,ename);
return 1;
}
return 0;
}
GetId和$是同一个函数,意思就是document.getElementById 展开
给函数做一个返回值,然后判断返回值就行了。
function closeMsg()
{
var retVal=false;
$("msgdiv").style.width=parseInt($("msgdiv").style.width)- 20+"px";
$("msgdiv").style.height=parseInt($("msgdiv").style.height)- 15+"px";
if(parseInt($("msgdiv").style.width)<=0)
{
document.body.removeChild(GetId("msgdiv"));
document.body.removeChild(GetId("maskdiv"));
retVal=true;
}
else
{
setTimeout("closeMsg()",30);
}
return retval;
}
if(changeMsg()){
document.getElementById("msgdiv").appendChild(thObj);
document.getElementById("msgdiv").appendChild(bodyObj);
}
扩展资料:
event.result这个属性包含了当前事件事件最后触发的那个闭瞎处理函数的返回值
如果为DOM元素的同一事件类型绑定了多个事昌贺件处理函数,你可以使用result属性获取上一个事件处理函数执行的返回值轿迅空。
<!DOCTYPE html>
<html>
<style>
</style>
<head>
<meta charset="UTF-8">
<title>演示文档</title>
<script type="text/javascript" src="jquery-3.1.1.min.js"></script>
<style type="text/css">
input{width: 100px;height: 30px;}
div{width: 100px;height: 100px;border:1px solid green;}
</style>
</style>
</head>
<body>
<h3>jQuery事件对象</h3>
<div id="div1"><p id="pid"></p></div>
<input id="btn1" type="button" value="事件对象">
<script type="text/javascript">
$(function(){
$('#btn1').click(function(){
// return 100
return true
})
$('#btn1').click(function(e){
// alert(e.result)
if (e.result) {
alert('进入下一关!')
}else{
alert('Game Over!')
}
})
})
</script>
</body>
</html>
出现这种情况下我们可以让JS进行等待,等待到特定的时间后再去转去执行另外的一些语句,也就是说我们使用settimeout等待到一定的时间后去执行,这种能解决一些问题的!
但新的问题也出来了,就是等待的时间不确定,可能等到一定的时间时该函数还没有完全执行,而函数外程序又是无法感知,怎么办?新的办法就是查询,这种方式能解决时间等待的问题!而我们使用时又不想让计算机一直运行,那么setinterval则是一个不错的选择,或者使用settimeout函数内自身调用的方式。
其实这种情况下已经能解决很大的一部分问题了,便是握扰薯如果是一个无返回的函数怎么办?外部无法段者感知函数自身是否执行完毕,其实在函数运行的出口处(出口也可能有多个)对一个全局的值进行一次生新的设置,也就是让函数主动报告是否已经完成。
这种情况下其实也是很吓人的,在你运行的程序中会多出一个参数来指示某个函数是否执行完毕,这事说起不有点吓人,万一哪天看这个参数没用,直接给删除了倒不是很妙的事,一些完美主义的人便想到了利用JS模拟OOp的方式,也就是说写成一个对象的方式,直接去查询查个对象的一个属性,这个对象的属性不会被轻易删除的!但其实作用是一样的!
那么,即然不能外部不能感知函数是否运行完毕,那么,函数自己总知道自己运行完毕了吧?而且循环查询有一个特点:设置时间长了是在浪费时间,设置时间短了,是在浪费CPU时间片,怎么才能不流费呢?
那么,为什么不将要后边执行的语句写成一个函数,然后,让那个运行函数出口时直接调用呢?其实这样才是最省事,最省时的方法,那么,一个函数在调用完毕后,也就是即将退出函数运行时,去执行你要调用的语句不就可以了?
嗯,这种方法一般也很常用,可能你还会觉得非常常好用,但他也是有缺点的——如果那个运行时间较长的函数的出口点不只一个,有多少我也不知道?每个出口点都要加上,这样又不太合算了!除非那那个函数的出口点设置为只有一个,否则这事还真有点难办呢!
那么,一些程序反倒不太适合用这种方法,虽然说这种方法是绝对的性能与时间都不浪费的方法,假定哪天你不小心改了一下函数名,那么调用这个函数的出口点都必须跟着改过来完,否则你自己想结果。我先承认一点就是虽然可以用查找替换的方式,但是,真的不太好,可能会替换其他函数,如你改的函数是play(),但里边还有一个meplay(),一不小心就会将meplay()改成一个什么玩意都不是的东西李弯——你可以说你的文件中不会出现这种情况——但完美主义者却不这么认为,那么还有没有更好的方法呢?
于是想到了OOP,何不将其利用OOP进行组合一下呢——这就涉及到了商业代码的利益了。
反正方法我是说了,但是怎么写成那样的代码,你自己看着来吧!
不过你现在可以将后两边句直接影响写在你的函数后边,当一个函数执行不就可了?多加一个方法的可能性都不要的!但如果有两个出口点就不一样了,如果更多,那你只有想更多的办法。至于代码么——那是思考之后的东西,我很少写。
判断耐虚裂函数是否执行完毕,你可以看看函数是否有返回值啊。
在判断语句的代码块中没有直接return的情况下。
只要接收到了函数的返回值。
那么函数就是已经执行完了所有代码的。
能不能把这两段代码改改?不太明白你的意思
function closeMsg()
{
var retVal=false;
$("msgdiv").style.width=parseInt($("msgdiv").style.width)- 20+"px";
$("msgdiv").style.height=parseInt($("msgdiv").style.height)- 15+"px";
if(parseInt($("msgdiv").style.width)<=0)
{
document.body.removeChild(GetId("msgdiv"));
document.body.removeChild(GetId("maskdiv"));
retVal=true;
}
else
{
setTimeout("closeMsg()",30);
}
return retval;
}
if(changeMsg()){
document.getElementById("msgdiv").appendChild(thObj);
document.getElementById("msgdiv").appendChild(bodyObj);
}
document.getElementById("msgdiv").appendChild(thObj);
document.getElementById("msgdiv").appendChild(bodyObj);
这庆辩两个放到changeMsg()函数的里面。誉庆缺。。差斗。
不能放...这个说起来比较复杂了...确实不能放
其实你这样写本来就是changeMsg()执行完再执行下面的东西的。因为是一个线程内顺序执行