js如何判断某个函数是否执行完?

changeMsg();document.getElementById("msgdiv").appendChild(thObj);document.getElementB... changeMsg();
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
展开
 我来答
大野瘦子
高粉答主

2019-07-09 · 繁杂信息太多,你要学会辨别
知道小有建树答主
回答量:1227
采纳率:100%
帮助的人:34.4万
展开全部

给函数做一个返回值,然后判断返回值就行了。

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>

百度网友66a8d48e5
推荐于2018-02-27 · TA获得超过7687个赞
知道大有可为答主
回答量:3002
采纳率:12%
帮助的人:3899万
展开全部
在JS代码中,其实本身是线性执行的,但是如果使用有函数的情况下,这种线性执行被打破了。比如其一个函数执行完毕后才允许另外一些语句的执行,这种情况下顺序写的代码并不等待函数执行完毕,除非那个函数能在一个时间片中完成!

出现这种情况下我们可以让JS进行等待,等待到特定的时间后再去转去执行另外的一些语句,也就是说我们使用settimeout等待到一定的时间后去执行,这种能解决一些问题的!

但新的问题也出来了,就是等待的时间不确定,可能等到一定的时间时该函数还没有完全执行,而函数外程序又是无法感知,怎么办?新的办法就是查询,这种方式能解决时间等待的问题!而我们使用时又不想让计算机一直运行,那么setinterval则是一个不错的选择,或者使用settimeout函数内自身调用的方式。

其实这种情况下已经能解决很大的一部分问题了,便是如果是一个无返回的函数怎么办?外部无法感知函数自身是否执行完毕,其实在函数运行的出口处(出口也可能有多个)对一个全局的值进行一次生新的设置,也就是让函数主动报告是否已经完成。

这种情况下其实也是很吓人的,在你运行的程序中会多出一个参数来指示某个函数是否执行完毕,这事说起不有点吓人,万一哪天看这个参数没用,直接给删除了倒不是很妙的事,一些完美主义的人便想到了利用JS模拟OOp的方式,也就是说写成一个对象的方式,直接去查询查个对象的一个属性,这个对象的属性不会被轻易删除的!但其实作用是一样的!

那么,即然不能外部不能感知函数是否运行完毕,那么,函数自己总知道自己运行完毕了吧?而且循环查询有一个特点:设置时间长了是在浪费时间,设置时间短了,是在浪费CPU时间片,怎么才能不流费呢?

那么,为什么不将要后边执行的语句写成一个函数,然后,让那个运行函数出口时直接调用呢?其实这样才是最省事,最省时的方法,那么,一个函数在调用完毕后,也就是即将退出函数运行时,去执行你要调用的语句不就可以了?

嗯,这种方法一般也很常用,可能你还会觉得非常常好用,但他也是有缺点的——如果那个运行时间较长的函数的出口点不只一个,有多少我也不知道?每个出口点都要加上,这样又不太合算了!除非那那个函数的出口点设置为只有一个,否则这事还真有点难办呢!

那么,一些程序反倒不太适合用这种方法,虽然说这种方法是绝对的性能与时间都不浪费的方法,假定哪天你不小心改了一下函数名,那么调用这个函数的出口点都必须跟着改过来完,否则你自己想结果。我先承认一点就是虽然可以用查找替换的方式,但是,真的不太好,可能会替换其他函数,如你改的函数是play(),但里边还有一个meplay(),一不小心就会将meplay()改成一个什么玩意都不是的东西——你可以说你的文件中不会出现这种情况——但完美主义者却不这么认为,那么还有没有更好的方法呢?

于是想到了OOP,何不将其利用OOP进行组合一下呢——这就涉及到了商业代码的利益了。

反正方法我是说了,但是怎么写成那样的代码,你自己看着来吧!

不过你现在可以将后两边句直接影响写在你的函数后边,当一个函数执行不就可了?多加一个方法的可能性都不要的!但如果有两个出口点就不一样了,如果更多,那你只有想更多的办法。至于代码么——那是思考之后的东西,我很少写。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
春嫣完颜睿博
2019-11-29 · TA获得超过3913个赞
知道大有可为答主
回答量:3130
采纳率:26%
帮助的人:191万
展开全部
不是很明白你的意思。
判断函数是否执行完毕,你可以看看函数是否有返回值啊。
在判断语句的代码块中没有直接return的情况下。
只要接收到了函数的返回值。
那么函数就是已经执行完了所有代码的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友45d5b4364
2012-03-06 · TA获得超过134个赞
知道小有建树答主
回答量:463
采纳率:0%
帮助的人:227万
展开全部
给 函数 做一个返回值 然后判断返回值 就行了
更多追问追答
追问
能不能把这两段代码改改?不太明白你的意思
追答
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);
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
weixiao800
2012-03-06 · TA获得超过824个赞
知道小有建树答主
回答量:482
采纳率:0%
帮助的人:439万
展开全部

document.getElementById("msgdiv").appendChild(thObj);
document.getElementById("msgdiv").appendChild(bodyObj);
这两个放到changeMsg()函数的里面。。。。
更多追问追答
追问
不能放...这个说起来比较复杂了...确实不能放
追答
其实你这样写本来就是changeMsg()执行完再执行下面的东西的。因为是一个线程内顺序执行
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式