Это тройной, который используется для определения того, что передается функции. Функция - это выражение с немедленным вызовом функции (IIFE) - функция, которая создается и сразу же вызывается.
//the condition
'undefined' != typeof Customer
//true value
? Customer
//false value
: module.exports
Если Customer
не определен, это тот же самый результат:
(function (Customer) {
Customer.Base = {
//...
}
})(module.exports);
Так что этот блок кода создает и сразу же вызывают функцию, которая делает что-то к Customer
. Если задано 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);
Это может быть легче понять в более общем примере.
Вот IIFE, функция, которая создается и сразу же вызывается: Live demo (click).
(function(param) {
console.log(param);
})('some param!');
и вот та же самая функция, с помощью тройной для определения значения пар: Live demo (click).
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, то может быть })()
или {())
, причем последний является более типичным синтаксиса.