javascript - 看过underscore.js源码的人,谁能告诉我 _ 是怎么在外部引用的?
本文介绍了javascript - 看过underscore.js源码的人,谁能告诉我 _ 是怎么在外部引用的?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
正在拜读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.这又是为什么?
解决方案
在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 文件然后就可以用_
来调用方法。
而且,源码的注释也表明了。
这篇关于javascript - 看过underscore.js源码的人,谁能告诉我 _ 是怎么在外部引用的?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文