// 新增测试代码
const test = require('./test.js');
test.testFn();
// Establish the root object, `window` (`self`) in the browser, `global`
// on the server, or `this` in some virtual machines. We use `self`
// instead of `window` for `WebWorker` support.
var root = typeof self == 'object' && self.self === self && self ||
typeof global == 'object' && global.global === global && global ||
this || {};
/** Used as a reference to the global object. */
var root = freeGlobal || freeSelf || Function('return this')();
从上面看出,判断是否node环境的global,以及判断是否是浏览器环境self,如果都不是,则返回this。也就是说root就是找到这个环境的全局对象。那么小程序的全局对象是什么呢???我们来测试一下:
我们在一个page页面中打印window,发现竟然是undefined?然后在页面中打印global和this,self,发现global是一个对象,但不是我们想要的,因为他没有global.Object对象,而且只有寥寥的几个属性。而this和self也是一个undefined,我们在小程序构建后的lodash中打印上述对象,发现和page中的值一致。那么,就很明显了,lodash中的root是一个{},因为Function('return this')()他返回的是一个空对象。那么很显然,一个空对象的Array属性肯定是undefined了。
var test = function () {
return this;
}
// underscore:undefined
// lodash:Window对象
咦,为什么在lodash中就可以打印出Window对象?这很让我疑惑,然后我打算在真机上测试一下,这时候他突然给了一个让人容易疏忽的提示: