看过underscore.js源码的人,谁能告诉我 _ 是怎么在外部引用的?

发布于 2022-09-02 23:54:17 字数 417 浏览 14 评论 0

正在拜读underscore.js源码, 但一直搞不清 _ 是如何在外部引用的。 我试着写了一个,但在外面引用时显示undefiend.(因为闭包),但underscore是如何做到可以在外面直接使用的?
下面是源码:

  var _ = function(obj) {
    if (obj instanceof _) return obj;
    if (!(this instanceof _)) return new _(obj);
    this._wrapped = obj;
  };

我用uderscore.js是直接<script src="underscore.js"></script> 的。也没有new _()这一步,也可以正常使用underscore.这又是为什么?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

骄傲 2022-09-09 23:54:17

underscore的前面你可以看到这一段代码:

(function() {
  var root = typeof self == 'object' && self.self === self && self ||
      typeof global == 'object' && global.global === global && global ||
      this;
    
  // 省略一些代码   
    
  var _ = function(obj) {
    if (obj instanceof _) return obj;
    if (!(this instanceof _)) return new _(obj);
    this._wrapped = obj;
  };

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

  // 省略一些代码
})();

那个root变量就是用来判断当前是什么环境的,区分 Node 和 browser ,接着往下看判断不是 Node 环境之后就直接在root变量上面声明了。而且root在赋值前也做了一些判断,self在 borwser 下面是指向 window,所以你可以直接用 script 标签引入 js 文件然后就可以用_来调用方法。

而且,源码的注释也表明了。

软糯酥胸 2022-09-09 23:54:17

如果你再认真往下看两行,你就成功了:

图片描述

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文