为什么我的功能支持测试在语法错误发生之前不运行



我正在在网站上进行JavaScript功能支持测试,但是我在对IE11进行测试时遇到了问题,该测试正在引起语法错误(由于默认参数)执行我的功能测试。

我的应用程序构建了一个脚本标签,以注入布局视图。该脚本标签是使用定义所有JS依赖项的配置构建的。我确保了将最终的JS文件传递到浏览器的文件中,我的功能检测位于组合脚本的顶部(紧随其后)。但是,似乎发生的事情是,在运行我的功能检测表达式之前,脚本中以后定义的某些函数正在运行(或解析?)。

为了更加清楚,这是我的脚本标签的示例:

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

导致脚本文件首先包含jQuery,然后是我的功能 - 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中从未触发"警报",而是指向默认参数函数

的"预期")。

我很确定您不能在这样的js中使用默认参数值,这可能是IE中正在破坏的。

您必须这样默认为:

processMessages: function(problem, container, useMessage) {
  if (typeof useMessage === 'undefined') useMessage = true;
}

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

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

我不是一个深入的专家,所以我的术语可能是错误的,但这是您的问题背后的想法

最新更新