#javascript #function #arguments
Вопрос:
Какие еще существуют варианты передачи и использования аргументов в функции с использованием объекта, кроме этих двух?
Вариант 1:
let timerClosure = function ({
period, // number
funStart, // function
funEnd, // function
funStartArguments = [],
funEndArguments = [],
warming = 0
}) {// something }
Вариант 2:
let timerClosure = function (timerConfigObj) {
let period = timerConfigObj.period; // number
let funStart = timerConfigObj.funStart;
let funEnd = timerConfigObj.funEnd;
let funStartArguments = timerConfigObj.funStartArguments || [];
let funEndArguments = timerConfigObj.funStartArguments || [];
let warming = timerConfigObj.warming || 0;
}
Ответ №1:
Эти или другие способы их раскручивания, в основном, и есть. Ну, это и использование массива, но если вы используете массив, вы также можете использовать дискретные параметры, у вас возникнет та же проблема со значительным порядком и проблемами с этим, когда вы перейдете к более чем трем параметрам.
Еще один способ раскрутить то, что у вас есть:
let timerClosure = function (timerConfigObj) {
const {
period, // number
funStart, // function
funEnd, // function
funStartArguments = [],
funEndArguments = [],
warming = 0
} = timerConfigObj;
// ...
};
Вы сказали «…и описываете» в названии, но не в тексте. Если эта часть важна для вас, вы можете описать их более полно, используя аннотации JDDoc, которые многие IDE могут прочитать и представить вам (даже если вы никогда на самом деле не запускали JSDoc) при использовании функции:
/**
* Does something nifty with timers and closures.
*
* @param {Object} options - Options for the nifty thing.
* @param {number} options.period - `period` description...
* @param {function} options.funStart - `funStart` description...
* @param {function} options.funEnd - `funEnd` description...
* @param {array} options.funStartArguments - `funStartArguments` description...
* @param {array} options.funEndArguments - `funEndArguments` description...
* @param {number} options.warning - `warning` description...
*/
let timerClosure = function ({
period, // number
funStart, // function
funEnd, // function
funStartArguments = [],
funEndArguments = [],
warming = 0
}) {
// ...
};
Аналогично, если вы создадите тип/интерфейс TypeScript и задокументируете его свойства, IDEs также покажет вам это.
/**
* Options for `timerClosure`
*/
interface TimerClosureOptions {
/**
* Period description...
*/
period: number;
funStart: function;
funEnd: function;
funStartArguments?: any[];
funEndArguments?: any[];
warming?: number;
}
/**
* Does something nifty with timers and closures.
*
* @param {TimerClosureOptions} options - Options for the nifty thing.
*/
let timerClosure = function ({
period,
funStart,
funEnd,
funStartArguments = [],
funEndArguments = [],
warming = 0
}: TimerClosureOptions) {
// ...
};