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

问题描述 投票:0回答:2

我正在我的网站上进行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中永远不会触发“警报”,而是指向默认参数功能的“预期”)

javascript internet-explorer
2个回答
0
投票

我很确定你不能在JS中使用默认参数值,这可能是IE中的突破。

你必须像这样默认它:

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


0
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.