1.执行环境判断 window 或 self
window
or self
?
在 underscore 的判断所处环境的代码中,似乎我们没有看到 window
对象的引用,其实,在浏览器环境下,self
保存的就是当前 window
对象的引用。那么相比较于使用 window
,使用 self
有什么优势呢?我们看到 MDN 上有这么一句话:
The Window.self read-only property returns the window itself, as a WindowProxy. It can be used with dot notation on a window object (that is, window.self) or standalone (self). The advantage of the standalone notation is that a similar notation exists for non-window contexts, such as in Web Workers.
概括来说,就是 self
还能用于一些不具有窗口的上下文环境中,比如 Web Workers。所以,为了服务于更多场景,underscore 选择了更加通用的 self
对象。
!(function(){ var root = (typeof self == "object" && self.self === self && self) || (typeof global == "object" && global.global === global && global) || this; });