Параметры для передачи и описания аргументов функции js

#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) {
    // ...
};