用javascript做什么?
我在阅读js源代码时遇到了这个问题用javascript做什么?,javascript,syntax,Javascript,Syntax,我在阅读js源代码时遇到了这个问题 var root = typeof self == 'object' && self.self === self && self || typeof global == 'object' && global.global === global && global || this || {}; // Save the pr
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._;
根是什么?
在这里做什么?通常,该代码块将导致前面的下划线
引用self
或global
或this
上的属性(无论求值对象是根
),并且所述属性值可能不存在。它与任何其他属性名称没有区别
例如,如果第一个条件通过:
typeof self == 'object' && self.self === self && self
然后,如果self
具有包含'foo'
的\ucode>属性,则先前的下划线
将被分配相同的字符串'foo'
const self={
_:“福”
};
self.self=self;
var root=typeof self=='object'&&self.self===self&&self||
typeof global=='object'&&global.global===global&&global||
这个||
{};
//保存``变量的上一个值。
var previous下划线=根;
log(PreviousUnderline,PreviousUnderline的类型)代码>(提示:\uu
是jQuery的$
)这就是此库全局绑定的内容。这段代码正在检查它们是否会覆盖其他内容,类似于noConflict
选项。那么在前面的下划线变量上没有更多的窗口对象可用吗?我试图理解核心概念。有些问题可能很愚蠢,但…@Nagarajwindow.self
在浏览器中返回window
或self
返回工作者的全局对象<节点中的code>global
将返回全局对象,其他一些环境可能有其他绑定,因此作为最后的手段,此
从IIFE内部应该是全局对象。现在,请注意,有一个js建议实现一个属性,该属性可以避免所有这些检查。@Nagaraj是的,问题是如果全局对象的\uuu
被下划线覆盖,这可能是不需要的,因此,noConflict
使用previousUnderline
变量在闭包中保存的上一个值,以便在调用(if)noConflict
时将其重新分配回全局对象。这并不愚蠢,这一切的目的并不完全显而易见