Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Nodejs module.exports和速记if/else_Javascript_Node.js_Npm - Fatal编程技术网

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,可以是
}()
{())
,后者是更典型的语法