首页 > 解决方案 > 为什么我的功能支持测试在语法错误发生之前没有运行?

问题描述

我正在我的网站上进行 Javascript 功能支持测试,但是在执行我的功能测试之前,我在 IE11 上进行测试时遇到了一个导致语法错误(由于默认参数)的问题。

我的应用程序构建了一个脚本标记以注入到布局视图中。该脚本标签是使用定义所有 JS 依赖项的配置构建的。我已确保传递给浏览器的生成的 JS 文件在组合脚本的顶部(就在 jQuery 之后)具有我的特征检测。但似乎正在发生的是,稍后在脚本中定义的某些函数在运行我的特征检测表达式之前正在运行(或解析?)。

为了更清楚起见,这是我的脚本标记的示例:

<script type="text/javascript" src="/asset/jscript?load=feature-detection,global,login&version=1820523616"></script>

这导致一个脚本文件首先包含 jQuery,然后是我的 feature-detection.js,然后是其他所有内容。这是导致语法错误的特征检测后其中一个 JS 文件中的行:

processMessages: function(problem, container, useMessage = true) {...}

编辑:

需要明确的是,我不确定为什么会在特征检测逻辑之前出现语法错误,即使我的特征检测在代码中发生得更早。这是我的组合脚本的样子:

/* jQuery v3.2.0 ... */
// This is a placeholder for jQuery code

// Test browser support for 'for...of' statement.
// If this feature is lacking, ES6 support is lacking from the browser
try {
    eval("for (var i of []);");
} catch(ex) {
    // Show 'Unsupported Browser' banner
    alert('GET BETTER BROWSER');
}

// The rest of my JS files, which would contain several non-supported features
processMessages: function(problem, container, useMessage = true) {...}

在 IE11 中永远不会触发“警报”,而是我得到指向默认参数函数的“预期')'”

标签: javascriptinternet-explorer

解决方案


Javascript首先编译然后执行,这是一个多阶段的过程。

您的语法错误将在编译周期(或解释时间)发生,这就是您在执行功能检测之前看到它的原因。

我不是深度 js 专家,所以我的术语可能是错误的,但这就是你的问题背后的想法


推荐阅读