Javascript Nodejs module.exports和速记if/else
行Javascript Nodejs module.exports和速记if/else,javascript,node.js,npm,Javascript,Node.js,Npm,行“未定义”!=客户类型?Customer:module.exports在下面的代码段中是什么?为什么要将所有内容都封装在(function(){})中?我似乎无法理解它的意思 此代码段来自库文件 (function (Customer) { Customer.Base = { //... } })( 'undefined' != typeof Customer ? Customer : module.exports ); 这是用于确定传递给函数的内容的三元函数。该函
“未定义”!=客户类型?Customer:module.exports
在下面的代码段中是什么?为什么要将所有内容都封装在(function(){})
中?我似乎无法理解它的意思
此代码段来自库文件
(function (Customer) {
Customer.Base = {
//...
}
})(
'undefined' != typeof Customer ? Customer : module.exports
);
这是用于确定传递给函数的内容的三元函数。该函数是一个立即调用的函数表达式(IIFE)——一个创建并立即调用的函数
//the condition
'undefined' != typeof Customer
//true value
? Customer
//false value
: module.exports
如果Customer
未定义,则结果相同:
(function (Customer) {
Customer.Base = {
//...
}
})(module.exports);
因此,此代码块正在创建并立即调用一个函数,该函数对客户
执行某些操作。如果定义了Customer
,则将Customer
作为函数参数传递给函数,函数参数也称为Customer
。如果Customer
未定义,module.exports
作为Customer
参数传递给函数。此代码可以重写为:
var param;
if ('undefined' != typeof Customer) {
param = Customer;
} else {
param = module.exports;
}
function myFunc(Customer) {
Customer.Base = {
//...
}
}
myFunc(param);
在一个更一般的例子中可能更容易理解
这是一个iLife,一个创建并立即调用的函数:
(function(param) {
console.log(param);
})('some param!');
var x = true;
//var x = false;
var value = x ? 'true value!' : 'false value!';
(function(param) {
console.log(param);
})(value);
这是同一个函数,使用三元来确定参数值:
(function(param) {
console.log(param);
})('some param!');
var x = true;
//var x = false;
var value = x ? 'true value!' : 'false value!';
(function(param) {
console.log(param);
})(value);
将x
(条件)更改为true或false,并查看value
的赋值是否相应更改
您可能经常会在()
中看到三元条件,但它们不是必需的:
('undefined' != typeof Customer) ? Customer : module.exports
此外,更典型的情况是,这种说法的要求正好相反:
typeof Customer === 'undefined'
在这里,对“真实性”进行简单的松散平等检查可能就足够了:
Customer ? Customer : module.exports
这可以再次简化为:
Customer || module.exports
//if "Customer" is truthy, it will be used, otherwise, module.exports is used
还要注意,对于IIFE,可以是}()
或{())
,后者是更典型的语法