javascript - 为什么我的功能支持测试在语法错误发生之前没有运行?
问题描述
我正在我的网站上进行 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首先编译然后执行,这是一个多阶段的过程。
您的语法错误将在编译周期(或解释时间)发生,这就是您在执行功能检测之前看到它的原因。
我不是深度 js 专家,所以我的术语可能是错误的,但这就是你的问题背后的想法
推荐阅读
- angular - Multi step Angular Form - Updating ngModel in hidden steps
- excel - 如何在 Excel 中的一行中应用数据验证工具
- jasper-reports - How can I get the first record of the table by using the same data-source for the main report and table in Jasper reports?
- sql - 通过在 where 子句中传递一个值来选择数据,如果值匹配则返回该数据,否则返回所有数据
- c++ - 为什么dynamic_cast从向量中的项目返回null?
- java - H2O AI:不支持的 MOJO 模型“word2vec”
- laravel - Vue根据电话号码输入和自动填写地址搜索客户详细信息
- python-3.x - 将值分配给数组中的列表
- docker - 如何减少在 Github Actions 上初始化容器的时间成本?
- matlab - 何时使用 PCA 进行降维?