javascript - 如何使用严格模式而不在 JSlint 中出错
问题描述
查看 JSlint 上的所有信息(例如此处或此处),讨论如下
始终使用严格模式,因为它会捕获更多错误。您所要做的就是将“使用严格”放在代码的顶部。就是这样!再简单不过了...除非 JSlint 抱怨并告诉您将其放入函数范围内,否则您必须将所有代码放入一个巨大的函数中。
我有数百个用 javascript 编写的函数,并且至少<body>
在加载时调用回调函数,所以我试图围绕我应该如何将我的所有函数放在另一个函数中,但仍然确保元素<body>
仍然可以刺穿外部函数并在内部范围内调用我的函数。
有人可以告诉我如何为这样的事情实施严格模式
function foo(){
"use strict"; /* Approach 1: Putting inside every function */
/* Extremely tedious and ugly */
$('#example').text('Hello '+ bar());
}
function bar(){
"use strict"; /* Approach 1: Putting inside every function */
/* Extremely tedious and ugly */
return 'Beautiful';
}
function fooBar (){
"use strict"; /* Approach 2: Putting once at the top of an outer function */
/* But now how does <body> call this function? */
function foo(){
"use strict";
$('#example').text('Hello '+ bar());
}
function bar(){
"use strict";
return 'Beautiful';
}
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<body onload="foo();">
<p id='example'>
</p>
</body>
解决方案
在现代 JavaScript 中,应尽可能避免内联处理程序,因为它们需要全局污染,需要使用一些参数转义难看的引号,并且具有荒谬的范围链规则。因此,请尝试删除内联处理程序并将您的 JavaScript 放入 IIFE,这可以变得严格:
(() => {
"use strict";
function foo() {
$('#example').text('Hello ' + bar());
}
function bar() {
return 'Beautiful';
}
window.addEventListener('DOMContentLoaded', foo);
})();
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<body>
<p id='example'>
</p>
</body>
如果您有任何其他类似的内联处理程序<body onload="foo();">
,我强烈建议您重构它们。
推荐阅读
- php - VSCode - 格式 - 打开标签(php)作为代码最左边的标尺直到结束标签?
- python - python - 如何以保持相互索引一致的方式对dict和list进行排序?
- amazon-web-services - 使用 DeepAR 对多个独立产品进行时间序列预测
- c - 检查字符串中的字符是否为 NULL 时的缺陷
- integration - 将列添加到结果
- pentaho - 向现有表 Pentaho 添加新列
- c++ - 扩展初始值设定项列表仅适用于 c++ 中的 -std=c++11 或 -std=gnu++11
- java - 数据 onResponse 后回调无法正常工作
- node.js - 将图像从节点 js 上传到 s3
- c - 在C之前/之前获取部分字符串(字符)