为什么在出现语法错误之前无法运行我的功能支持测试?

时间:2019-03-18 16:04:42

标签: javascript internet-explorer

我正在我的站点上进行Javascript功能支持测试,但是在执行IE11功能测试之前,在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中从未触发过“警报”,相反,我得到了“ Expected')'”,指向默认参数函数

2 个答案:

答案 0 :(得分:0)

我非常确定您不能在JS中使用默认参数值,这可能是IE中的问题。

您必须像这样默认它:

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

答案 1 :(得分:0)

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

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

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