相关疑难解决方法(0)

如何在使用strict mode pragma时声明全局变量

使用自调用函数来包装严格模式兼容代码(通常称为严格模式编译指示)被认为是一种好习惯:

(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)

任何偏好和动机?其他选择?

javascript

32
推荐指数
3
解决办法
2万
查看次数

node.js:在全局范围中混淆使用'this'

我最近一直在玩node.js而且我遇到了关于this模块全局范围内使用的奇怪行为.

this 绑定到全局范围中的module.exports:

console.log(this === exports); // -> true
Run Code Online (Sandbox Code Playgroud)

但是this在方法范围内绑定到全局:

(function() { console.log(this === global); })(); // -> true
Run Code Online (Sandbox Code Playgroud)

这也导致了这种令人困惑的行为:

this.Foo = "Weird";
console.log(Foo); // -> throws undefined

(function() { this.Bar = "Weird"; })();
console.log(Bar); // -> "Weird"
Run Code Online (Sandbox Code Playgroud)

我想解决方案是永远不要this在全局范围内使用并明确使用extendsglobal替代,但是这背后是否存在逻辑,或者它是node.js中的错误或限制?

javascript node.js

10
推荐指数
2
解决办法
254
查看次数

IIFE和窗口对象?

IIFE需要访问非重写window对象 - 可以看作:

像(jQuery示例):

$(function (global) {
  // do something with global
})( window );
Run Code Online (Sandbox Code Playgroud)

但有时我也看到这个(underscore.js):

(function() {
  var global= this;
  // do something with global
}).call(this);
Run Code Online (Sandbox Code Playgroud)

问题1:有什么区别吗?如果是这样,我应该何时使用?

问题2:this里面IIFE window.为什么有必要"发送" window/ call(this)?(jQuery没有使用严格模式imho)

NB

看起来jQuery(从1.11.0开始)也采用了这种模式:

(function (global, factory)
{
   //....

}(typeof window !== "undefined" ? window : this, function (window, noGlobal)
{
   //...
});
Run Code Online (Sandbox Code Playgroud)

javascript jquery

7
推荐指数
1
解决办法
1247
查看次数

为什么`eval`适用于非字符串?

我一直在玩,eval并注意到它可以评估Chrome,Firefox和Opera中的非字符串:

eval(Array) === Array; // true
eval(this) === this;   // true
eval(4 * 3 / 2) === 6; // true
Run Code Online (Sandbox Code Playgroud)

这是标准行为吗?是否记录在任何地方?我找不到eval除了字符串参数之外的任何其他内容.

如果这不是标准行为,有人可以识别出不起作用的主机环境吗?

javascript standards eval

3
推荐指数
1
解决办法
107
查看次数

标签 统计

javascript ×4

eval ×1

jquery ×1

node.js ×1

standards ×1