backbone.js以:
开头//Establish the root object, `window` (`self`) in the browser, or `global` on the server.
//We use `self` instead of `window` for `WebWorker` support.
var root = (typeof self == 'object' && self.self == self && self) ||
(typeof global == 'object' && global.global == global && global);
什么是self.self == self
?什么时候可以是假的?
与global.global == global
相同。
答案 0 :(得分:1)
function Mistake(x);
self = this;
x.on("event", function() {
console.log(self);
});
}
new Mistake(…);
你发现了吗?现在我们得到的全局self
不是主干期望的self
。因此它检查self
实际上是否是全局对象,当self
是对象并且对象具有“全局变量”self
作为指向的属性时可能就是这种情况对象本身。
global
相同。
答案 1 :(得分:0)
我认为here你至少可以找到部分解释。
答案 2 :(得分:0)
我相信本文可以回答问题。
The Global Object in Various JS Environments
简而言之:
typeof self === 'object' && self.self === self && self
在浏览器环境中检测到全局对象,同时支持在WebWorker中运行的代码。typeof global === 'object' && global.global === global && global
检测到服务器上的全局对象(例如Node.js)。this
作为后备,以添加对在Node.js vm模块中运行的代码的支持。