今天在阅读lodash源码的时候,发现如下代码,略作分享:
1.代码片段一
/** Detect free variable `global` from Node.js. */
var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;
module.exports = freeGlobal;
该代码目的是检测lodash运行环境是否为node环境,以此来获取全局变量。分析下它的代码:
typeof global == 'object' && global && global.Object === Object && global;
这个就是当global满足前三个条件时,返回该global全局变量。
有node环境的判断,相应的就有浏览器环境的判断:
2.代码片段二
var freeGlobal = require('./_freeGlobal');
/** Detect free variable `self`. */
var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
/** Used as a reference to the global object. */
var root = freeGlobal || freeSelf || Function('return this')();
module.exports = root;
- 该代码得到最终的全局变量。
- 这里的self指的是
window.self
。MDN:指向当前window的一个引用。意思就是window啦。 var root = freeGlobal || freeSelf || Function('return this')();
这个里面的Function('return this')()
就是一个匿名函数执行,即:(function(){return this})()
。返回当前环境的this引用。