下划线 - > var _ function

时间:2016-03-18 22:10:59

标签: javascript underscore.js

有人能解释一下它到底发生了什么吗?

它是下划线库的心跳,因为它公开了_以供使用,但是如何将_暴露为可公开使用的内容?

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

1 个答案:

答案 0 :(得分:2)

在这些行之下,有一些代码:

if (typeof exports !== 'undefined') {
  if (typeof module !== 'undefined' && module.exports) {
    exports = module.exports = _;
  }
  exports._ = _;
} else {
  root._ = _;
}

如果您在浏览器环境中,exports将为undefined,因此root._将设置为_root在顶部设为this,默认值thiswindow