【问题标题】:Does javascript execution stop when an invalid line is encountered?遇到无效行时javascript执行是否停止?
【发布时间】:2011-08-24 20:04:32
【问题描述】:

如果浏览器在网页上执行 JavaScript 并且遇到无效的 JavaScript (例如 somerandomthingy;)JavaScript 的执行是否在该点停止,或者异步操作是否继续。 JavaScript 事件是否仍然有效(例如 onclick)。

【问题讨论】:

    标签: javascript


    【解决方案1】:

    是的,除了异步的。 http://jsfiddle.net/pimvdb/R4dfJ/3/

    DIY:

    var a = 1, b, c;
    
    setTimeout(function() {
        b = 2;
        console.log('Running', a, b, c);
    }, 1000);
    
    somerandomthingy;
    
    c = 3;
    

    Uncaught ReferenceError: somerandomthingy is not defined

    运行 1 2 未定义

    所以:

    • ab 已设置
    • c 尚未设置
    • 仍然发生超时

    至于“onclick 是否仍然有效” - 好吧,如果处理程序设置在运行的代码中(即在错误之前),它可以;如果将其放在错误代码之后,它将不会绑定处理程序,因此事件将不起作用。

    【讨论】:

    • 所以它不应该影响异步操作。 Kewlio。
    • 如何使用从多个文件调用的 javascript 进行更复杂的设置?
    • @Kevin:见jsfiddle.net/TGBYV。基本上每个文件都是一样的。
    • 令人着迷,谢谢。似乎运行得很好。带有外部脚本的头部会有所不同吗?我知道发生了一些奇怪的操作顺序......
    • @Kevin:我不能轻易地测试出来。我相信顺序并没有什么不同 - 当包括像 jquery.jsjquery.ui.jsjquery.ui.foo.js 这样的脚本时,事情会成功运行,每个后续文件都依赖于前一个文件。
    【解决方案2】:

    没有代码在错误之后执行。

    function inAFunction(){
     alert("one");
     x = y;
     alert("two");  
    }
    inAFunction();
    

    你会看到“一”而不是“二”

    alert("one");
    x = y;
    alert("two");
    

    你会看到“一”而不是“二”

    var a = {
        b : c
    }
    alert("here");
    

    你什么也看不到。

    【讨论】:

      【解决方案3】:

      这在某种程度上取决于你在做什么。通常事情会停止执行,如果您使用带有控制台的智能浏览器,则会记录一条错误消息(有时这些错误消息很有帮助,甚至但并非总是如此)。

      UNCAUGHT EXCEPTION: SYNTAX ERROR, UNRECOGNIZED EXPRESSION: #

      然而,有时候,东西会默默地失败,没有错误或警告,尤其是当你使用 jQuery 或其他库时。我花了好几个小时来解决为什么在 WebKit 和 Firefox 中运行良好但在 IE 中默默失败的原因,并将罪魁祸首追溯到 jQuery .append() 方法中的 PEBCAK 错误,该方法试图将一些无效的 HTML 插入 DOM。这令人抓狂,因为其他一切都运行良好,没有错误,没有警告,什么都没有,但在 IE 中,一个函数就是不会“运行”。

      【讨论】:

        【解决方案4】:

        我认为执行会停止。如果您在一行代码中断后设置警报,您将无法到达警报,这使我相信执行停止。不过,我不确定异步 XmlHtttpRequests 是否也是如此。

        【讨论】:

          猜你喜欢
          • 2011-07-14
          • 1970-01-01
          • 1970-01-01
          • 2010-10-15
          • 1970-01-01
          • 2021-09-10
          • 2012-11-21
          • 1970-01-01
          • 2015-12-10
          相关资源
          最近更新 更多