избыточность именования в параметрах функции javascript

javascript jquery

74 просмотра

4 ответа

Как установить значение по умолчанию для параметра синхронизации?

function active_timer(timing){
    interval = setInterval(function(){
        console.log('interval');
    }, timing);
}

Я могу сделать это

function active_timer(timing){
    var time = 1000;
    if(timing){
        time = timing
    }
    interval = setInterval(function(){
        console.log('interval');
    }, time);
}

Моя проблема с именами, временем и временем на самом деле одно и то же, как я могу написать менее избыточный код в JavaScript?

Автор: Maria Jane Источник Размещён: 08.11.2019 11:32

Ответы (4)


1 плюс

Решение

Аргумент - это (локальная) переменная, как и любая другая.

timing = timing || 1000;

Вы можете переписать его без заботы в мире.

Автор: Niet the Dark Absol Размещён: 20.08.2016 04:03

1 плюс

Вы можете добавить проверку в вашей функции,

if (typeof timing == 'undefined')
    timing = defaultValue;

или ( троичный оператор )

timing = (typeof timing == 'undefined') ? defaultValue : timing;

или же

timing = timing || defaultValue 

пример typeof

function x(y) 
{
  if (typeof y == 'undefined')
    y = 5;

  return y;
}

alert(x()); // 5

alert(x(25)); // 25

JSFiddle

Материал для чтения

typeof

MDN - параметры по умолчанию

Автор: Script47 Размещён: 20.08.2016 04:02

1 плюс

В ES2015 (он же «ES6») и более поздних версиях вы можете указать значение по умолчанию для аргумента:

// ES2015+
function active_timer(timing = 1000) {
// -------------------------^^^^^^^
    interval = setInterval(function(){
        console.log('interval');
    }, timing);
}

В ES5 и более ранних версиях (ну, технически все это относится и к ES2015 +) : вы можете назначать значения аргументам функции, поэтому вам не нужна отдельная переменная, если она вам не нужна. Если active_timerвызывается без каких-либо аргументов, timingбудет иметь значение undefined.

У вас есть несколько вариантов того, как определить, нужно ли вам применять значение по умолчанию:

if (timing === undefined) {
    timing = 1000;
}

или же

if (typeof timing === "undefined") {
    timing = 1000;
}

или же

if (arguments.length === 0) {   // NOT RECOMMENDED
    timing = 1000;
}

(Не рекомендуется, поскольку использование argumentsвнутри функции может повлиять на ее производительность.)

Или, если вы знаете, active_timerчто никогда не будет вызван с 0, вы можете использовать необычайно мощный ||оператор :

function active_timer(timing){
    interval = setInterval(function(){
        console.log('interval');
    }, timing || 1000); // Only if you know timing won't be 0
}

Результатом a || bявляется значение, aесли оно ' правдиво , или значение, bесли aэто ложь . В falsy значения 0, "", undefined, null, NaN, и, конечно же , false.

Автор: T.J. Crowder Размещён: 20.08.2016 04:10

0 плюса

Вы можете использовать параметр по умолчанию и функцию стрелки ES2015:

function activeTimer(timing = 1000) {
    setInterval( () => {
        console.log('interval:' + timing);
    }, timing);
}

activeTimer();

Смотрите также скрипку .

Автор: Michael Andorfer Размещён: 20.08.2016 04:46
Вопросы из категории :
32x32