有人能解释一下它到底发生了什么吗?
它是下划线库的心跳,因为它公开了_
以供使用,但是如何将_
暴露为可公开使用的内容?
var _ = function(obj) {
if (obj instanceof _) return obj;
if (!(this instanceof _)) return new _(obj);
this._wrapped = obj;
};
如果我在控制台中键入_
,则会返回以下内容:
_(obj) {
if (obj instanceof _) return obj;
if (!(this instanceof _)) return new _(obj);
this._wrapped = obj;
}
然而.....我们直接上面
var root = this;
如果在控制台中键入root
,它将返回root is not defined
,因为它在IIFE的范围内受到保护。它似乎是最小特权原则的一个很好的例子。
我几乎可以肯定使用new _(obj)
来公开_
,但我们会理解这个函数的解释。传递obj
的例子是什么?下划线方法之一?
如果需要更多上下文,则来源,特别是此部分可以是found here。
答案 0 :(得分:2)
在这些行之下,有一些代码:
if (typeof exports !== 'undefined') {
if (typeof module !== 'undefined' && module.exports) {
exports = module.exports = _;
}
exports._ = _;
} else {
root._ = _;
}
如果您在浏览器环境中,exports
将为undefined
,因此root._
将设置为_
。 root
在顶部设为this
,默认值this
为window
。