假设我们有这个脚本。
var apple = {
type: "macintosh",
color: "red",
getInfo: function () {
return this.color + ' ' + this.type + ' apple';
}
///more functions here....
}
如何让所有这些功能在严格模式下运行?我可以在文件的顶部放置“use strict”,但JSlint不批准这个。另一种方法是在每个函数中加上“use strict”,但是有更好的选择吗?
答案 0 :(得分:6)
将所有内容包装在IIFE中,JSLint应该批准。
(function () {
"use strict";
//all your code here
}());
请注意,当移动到此立即调用的函数表达式中时,先前在全局范围中声明的变量/函数将无法再在全局范围内访问。
您必须将这些显式设置为全局对象的属性,例如浏览器环境的window
对象:
(function () {
"use strict";
window.someGlobalVariable = "something";
}());
@zzzzBov 的解决方案在浏览器和后端环境中也能很好地运行。
答案 1 :(得分:2)
将所有内容包装在IIFE中,为全局引用添加别名,并在全局对象上显式设置全局变量:
(function (root) { //could be window (browser), could be global (node)
"use strict";
...code...
root.apple = apple; //explicitly make apple a global variable
}(this));
答案 2 :(得分:0)
如果您使用命名空间作为对象文字,我最喜欢这种方法:
(function (myApp) {
'use strict';
myApp.myObj = {
init: function(){}
}
}(window.myApp = window.myApp || {}));
myApp.myObj.init();