我正在使用名为Reqwest的javascript迷你库。它假设做ajax请求,但在Internet Explorer中它会抛出错误。 Peer dependency xhr2 required! Please npm install xhr2'
。 Xhr2是一个库,假设与node.js一起使用我在前端运行代码。
我试图理解这段代码的作用,它是如何执行的以及变量的来源。我现在最好的选择是由于某种原因context.hasOwnProperty('window')
是假的,并假设代码正在运行服务器端。但我不明白为什么。
!function (name, context, definition) {
if (typeof module != 'undefined' && module.exports) module.exports = definition()
else if (typeof define == 'function' && define.amd) define(definition)
else context[name] = definition()
}('reqwest', this, function () {
var context = this
if (context.hasOwnProperty('window')) {
var doc = document
, byTag = 'getElementsByTagName'
, head = doc[byTag]('head')[0]
} else {
var XHR2
try {
XHR2 = require('xhr2')
} catch (ex) {
throw new Error('Peer dependency `xhr2` required! Please npm install xhr2')
}
}
...
}
答案 0 :(得分:1)
首先。
var bKey = new Buffer('abcdwAYserXbzcSeqL/zPg==', 'base64');
var cipher = crypto.createCipher('aes-128-ecb',bKey);
//cipher.setAutoPadding(auto_padding=false);
var crypted = cipher.update('abc',null,'base64');
crypted+=cipher.final('base64');
console.log(crypted);
这是
的捷径!function(){}();
只需立即执行匿名函数( function() {} )();
例如,
function() {}
将打印!function(arg1){ console.log(arg1); }("argument1");
。
现在:
argument1
!function(name,context, definition)
,name
和context
分别为definition
,"reqwest"
和声明的匿名函数
在浏览器中,对象this
是this
对象,但在Node.js中,它相当于module.exports对象(如果没有任何其他模块填充,则为空对象) )
现在,在匿名函数
中Window
检查我们是否在Node.js环境中,始终定义对象(typeof module != 'undefined' && module.exports)
和module
。
module.exports
检查我们是否有requireJs(在浏览器环境中)。
在第一种情况下,它导出执行作为参数传递的函数的模块(将返回一个对象或函数)。它就像Node.js一样。
在第二种情况下执行函数define,就像requireJs一样。
在最后一种情况下,将模块(作为函数的返回)放在上下文对象中(可能是Window)。
在函数内部,我们有:
(typeof define == 'function' && define.amd)
检查我们是否在浏览器environemnt中(对象窗口有属性窗口)。 如果我们在浏览器中,我们有一些本机函数(如XMLHttpRequest),但在Node.js中我们必须加载为外部库(如xhr2)。然后
if (context.hasOwnProperty('window')) {
等......:)