javascript中停止程序执行实现exit效果

广告位招租
扫码页面底部二维码联系

javascript中非常坑的一点是,所【作者:唐霜】【作者:唐霜】以的代码几乎都为异步执行做了准备,虽然在【原创内容,转载请注明出处】原创内容,盗版必究。很多时候这样做确实很方便,但是有的时候却【原创内容,转载请注明出处】未经授权,禁止复制转载。坑了开发者。在javascript中有一著作权归作者所有,禁止商业用途转载。未经授权,禁止复制转载。个很疼的问题,就是没有办法退出程序,也就【关注微信公众号:wwwtangshuangnet】【版权所有】唐霜 www.tangshuang.net是其他很多语言中都有的exit命令操作。

【访问 www.tangshuang.n本文版权归作者所有,未经授权不得转载。转载请注明出处:www.tangshuang.netet 获取更多精彩内容】【版权所有】唐霜 www.tangshu【版权所有】唐霜 www.tangshuang.net【作者:唐霜】ang.net

不过,为了填平这个坑,我们也要想很多办法本文作者:唐霜,转载请注明出处。【访问 www.tangshuang.net 获取更多精彩内容】来做到这个效果。

原创内容,盗版必究。【版权所有】唐霜 www.tangshu原创内容,盗版必究。【访问 www.tangshuang.net 获取更多精彩内容】ang.net

为什么非得要在javascript中中断【版权所有】唐霜 www.tangshuang.net【本文首发于唐霜的博客】执行呢?举一个例子:

本文版权归作者所有,未经授权不得转载。【版权所有,侵权必究】【访问 www.tangshuang.n【未经授权禁止转载】【转载请注明来源】et 获取更多精彩内容】
document.getElementById('btn').onclick = function(){
  Dialog.open(function(result){
    if(result.error == 1) Dialog.stop();
  });
}

这段代码的意思是,当点击#btn时,Di【版权所有】唐霜 www.tangshuang.net原创内容,盗版必究。alog插件进行打开操作,但是在打开过程未经授权,禁止复制转载。本文版权归作者所有,未经授权不得转载。中,通过result的判断,决定是否继续【转载请注明来源】【版权所有,侵权必究】打开,还是停止退出。

著作权归作者所有,禁止商业用途转载。【本文首发于唐霜的博客】【转载请注明来源】

要实现Dialog.stop()必须进到本文版权归作者所有,未经授权不得转载。【版权所有,侵权必究】Dialog插件的内部,对插件源码进行调【本文受版权保护】未经授权,禁止复制转载。整,如果从面向对象的角度讲,我们不应该对【未经授权禁止转载】【关注微信公众号:wwwtangshuangnet】插件本身进行修改,而是通过外部的行为在有【原创不易,请尊重版权】【作者:唐霜】限的接口中做可能做的事。而这个时候问题就【未经授权禁止转载】【原创内容,转载请注明出处】来了,如果插件执行Dialog.stop【访问 www.tangshuang.net 获取更多精彩内容】著作权归作者所有,禁止商业用途转载。()操作是在打开dialog之后呢?也就【版权所有】唐霜 www.tangshuang.net本文版权归作者所有,未经授权不得转载。是说我们本来希望error == 1的时【版权所有,侵权必究】【版权所有,侵权必究】候不要弹出弹窗,可是实际上,因为open【原创内容,转载请注明出处】本文作者:唐霜,转载请注明出处。()方法的回调函数是在弹窗打开时同时执行【转载请注明来源】【版权所有,侵权必究】的,所以这就导致弹窗一定会打开。我们可以转载请注明出处:www.tangshuang.net【版权所有】唐霜 www.tangshuang.net看下Dialog的这个位置的源码:

【原创内容,转载请注明出处】转载请注明出处:www.tangshua【未经授权禁止转载】本文作者:唐霜,转载请注明出处。ng.net
Dialog.open = function(callback) {
  ...
  if(typeof callback == 'function') callback(result);
  show(element_id,content);
  ...
}

虽然在源码中,callback在show【版权所有】唐霜 www.tangshuang.net转载请注明出处:www.tangshuang.net之前执行,但是我们无法做到在执行到cal本文版权归作者所有,未经授权不得转载。本文作者:唐霜,转载请注明出处。lback时禁止下方的show()执行。【关注微信公众号:wwwtangshuangnet】【关注微信公众号:wwwtangshuangnet】在javascript中,唯一合法的中断著作权归作者所有,禁止商业用途转载。【原创内容,转载请注明出处】语句包括break和return,前这用【版权所有】唐霜 www.tangshuang.net【访问 www.tangshuang.net 获取更多精彩内容】在for和switch中,后者用在fun【版权所有】唐霜 www.tangshuang.net【未经授权禁止转载】ction中,但是没有任何一个方法,可以原创内容,盗版必究。著作权归作者所有,禁止商业用途转载。让上述代码中的callback(resu【本文受版权保护】【本文首发于唐霜的博客】lt)可以停止代码执行。

原创内容,盗版必究。本文作者:唐霜,转载请注明出处。【访问 www.tangshuang.n【关注微信公众号:wwwtangshuangnet】【版权所有,侵权必究】et 获取更多精彩内容】

那么下面是放出黑科技的时候了。

【原创不易,请尊重版权】【本文受版权保护】原创内容,盗版必究。

在javascript中,停止,或者避免【访问 www.tangshuang.net 获取更多精彩内容】本文版权归作者所有,未经授权不得转载。当前代码以下的代码被执行的,可以使用错误著作权归作者所有,禁止商业用途转载。【版权所有】唐霜 www.tangshuang.net来实现。这里的错误包括语法错误、程序错误未经授权,禁止复制转载。转载请注明出处:www.tangshuang.net、变量错误,甚至内存溢出。比方说,我们回【原创内容,转载请注明出处】【作者:唐霜】到上面第一段代码,我们用红色标记出了Di【原创内容,转载请注明出处】本文作者:唐霜,转载请注明出处。alog.stop(),可是实际上,在D【本文首发于唐霜的博客】本文版权归作者所有,未经授权不得转载。ialog插件中,并不存在这样一个方法,【访问 www.tangshuang.net 获取更多精彩内容】【未经授权禁止转载】在全局中也不存在一个stop()函数,所【转载请注明来源】【版权所有】唐霜 www.tangshuang.net以,这里会出现一个错误:

【版权所有】唐霜 www.tangshu著作权归作者所有,禁止商业用途转载。未经授权,禁止复制转载。ang.net【关注微信公众号:wwwtangshua本文版权归作者所有,未经授权不得转载。著作权归作者所有,禁止商业用途转载。ngnet】本文版权归作者所有,未经授权不得转载。

function stop is not【原创内容,转载请注明出处】【本文首发于唐霜的博客】 defined!

【访问 www.tangshuang.n【作者:唐霜】【访问 www.tangshuang.net 获取更多精彩内容】et 获取更多精彩内容】【版权所有】唐霜 www.tangshu【访问 www.tangshuang.net 获取更多精彩内容】著作权归作者所有,禁止商业用途转载。ang.net未经授权,禁止复制转载。【访问 www.tangshuang.n【访问 www.tangshuang.net 获取更多精彩内容】【原创内容,转载请注明出处】et 获取更多精彩内容】

而当错误出现的时候,javascript【作者:唐霜】【版权所有,侵权必究】停止执行。这种方法可能影响系统中的其他代原创内容,盗版必究。【关注微信公众号:wwwtangshuangnet】码的执行。而如果我们希望通过一种比较合法转载请注明出处:www.tangshuang.net【关注微信公众号:wwwtangshuangnet】化的方法达到同样的效果,则可以使用thr【未经授权禁止转载】【原创不易,请尊重版权】ow来做到:

本文版权归作者所有,未经授权不得转载。【关注微信公众号:wwwtangshua【关注微信公众号:wwwtangshuangnet】未经授权,禁止复制转载。ngnet】【访问 www.tangshuang.n转载请注明出处:www.tangshuang.net【本文首发于唐霜的博客】et 获取更多精彩内容】
throw new Error(result.error_code);

当javascript遇到throw n【访问 www.tangshuang.net 获取更多精彩内容】【原创内容,转载请注明出处】ew Error时,会抛出错误,它可以立【未经授权禁止转载】【原创不易,请尊重版权】即终止整个javascript代码的运行【原创内容,转载请注明出处】著作权归作者所有,禁止商业用途转载。。当然,在它之前运行过的代码,是ok的,著作权归作者所有,禁止商业用途转载。未经授权,禁止复制转载。并不会受到过大的影响,甚至在它之后的函数【转载请注明来源】【原创内容,转载请注明出处】,也能被正常调用:

【本文首发于唐霜的博客】【转载请注明来源】转载请注明出处:www.tangshua原创内容,盗版必究。【原创不易,请尊重版权】ng.net
a(1);

throw new Error('exit');

a(2);

function a(msg) {
 alert(msg);
}

上面这段代码中,a(1)被正常执行,而a【原创内容,转载请注明出处】原创内容,盗版必究。(2)则不行。(当然,通过调用一个错误的【本文受版权保护】未经授权,禁止复制转载。函数,也可以达到这个效果。)

原创内容,盗版必究。未经授权,禁止复制转载。转载请注明出处:www.tangshua未经授权,禁止复制转载。本文版权归作者所有,未经授权不得转载。ng.net

2016-03-08 55446

为价值买单,打赏一杯咖啡

本文价值554.46RMB