self.self ==自我检查JavaScript的目标是什么?

时间:2015-10-17 01:57:09

标签: javascript backbone.js

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相同。

3 个答案:

答案 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模块中运行的代码的支持。