Javascript 关于下划线'开头部分的混淆;s源代码
我试图查看random library的源代码,以了解创建我自己的库的要点,但我在下划线的源代码开头遇到了一些问题,如下所示:Javascript 关于下划线'开头部分的混淆;s源代码,javascript,Javascript,我试图查看random library的源代码,以了解创建我自己的库的要点,但我在下划线的源代码开头遇到了一些问题,如下所示: // Baseline setup // -------------- // Establish the root object, `window` (`self`) in the browser, `global` // on the server, or `this` in some virtual machines. We use `self`
// Baseline setup
// --------------
// Establish the root object, `window` (`self`) in the browser, `global`
// on the server, or `this` in some virtual machines. 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 ||
this;
// Save the previous value of the `_` variable.
var previousUnderscore = root._;
// Save bytes in the minified (but not gzipped) version:
var ArrayProto = Array.prototype, ObjProto = Object.prototype;
var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null;
// Create quick reference variables for speed access to core prototypes.
var push = ArrayProto.push,
slice = ArrayProto.slice,
toString = ObjProto.toString,
hasOwnProperty = ObjProto.hasOwnProperty;
我的问题是:
1) 根变量表达式的用途是什么?我看到它正试图看看是否有一个窗口对象。但是什么是全局对象,因为它在浏览器上是未定义的
2) 为本机方法创建独立变量的目的是什么?这些本机方法易于访问,而无需将它们存储为不必要的变量
3) 就下划线而言,符号原型的目的是什么?以前从没见过这样用过
无论如何,谢谢你帮我澄清这一点。1)在node.js
中,global
相当于浏览器的窗口
,正如注释中所述,这在某些虚拟机中
。这是为了让库在跨平台时表现出相同的行为
2) 显然,ArrayProto
和ObjectProto
在代码库中被大量使用,因此使用较短的引用似乎很方便
3) 您可以阅读pull请求,显然1。请参见第2行上方的注释。缩小
global
对象在浏览器中未定义,但在node.js中定义。窗口
对象在node.js中未定义,但在浏览器中定义。下划线只是试图找到真正的全局对象,它要么是全局的
,要么是窗口的
(它显然别名为self
),要么就是这个
,如果不是在严格模式下,它就同时存在于这两个窗口上。