使用自调用函数来包装严格模式兼容代码(通常称为严格模式编译指示)被认为是一种好习惯:
(function(){
"use strict";
// Strict code here
}());
Run Code Online (Sandbox Code Playgroud)
我的问题是如何在这种情况下声明全局变量?我今天知道的三种选择:
备选方案1:
var GLOB = {};
(function(){
"use strict";
}());
Run Code Online (Sandbox Code Playgroud)
备选方案2:
(function(){
"use strict";
window.GLOB = {};
}());
Run Code Online (Sandbox Code Playgroud)
备选方案3:
(function(win){
"use strict";
win.GLOB = {};
}(window));
Run Code Online (Sandbox Code Playgroud)
任何偏好和动机?其他选择?
小智 55
IMO备选方案3是最好的.但它假设window代表全局范围 - 这对于浏览器而言是正确的,但对于其他JS环境(命令行,Node.js等)则不然.
以下内容将全面运作:
(function(globals){
"use strict";
globals.GLOB = {};
}(this));
Run Code Online (Sandbox Code Playgroud)
Ada*_*sko 10
我知道这是一个古老的问题,但有一个没有提到获得全球背景的方法:
(function(globals){
"use strict";
globals.GLOB = {};
}( (1,eval)('this') ));
Run Code Online (Sandbox Code Playgroud)
(1,eval)('this')
this将从全局上下文进行评估,因此您可以将其粘贴到您喜欢的任何地方,并且您将始终获得全局上下文
如果将方法 1 粘贴到另一个函数中,方法 1 将会失败。
使用方法 3,可以更轻松地将方法导出到另一个命名空间。只需替换window为,例如,frames[0]或document就足以将所有方法附加到自定义命名空间。
出于最后一个原因,我推荐方法 3。
| 归档时间: |
|
| 查看次数: |
19360 次 |
| 最近记录: |