StaDi
@StaDi
Курьер в it отделе

Можно ли в js функции задавать переменные по умолчанию?

Добрый день.
Возможно ли в javascripts задать функции значения по умолчанию?
например как в пхп
function example($name = 'example', $size = 102 ...){...}


И если ли какая то обширная библиотека знаний по js, как например php.net ?
  • Вопрос задан
  • 983 просмотра
Решения вопроса 5
Menlod
@Menlod
Front-end developer
function test(name){
      name = name || "some var"
      console.log(name);
  }
  test();
Ответ написан
orlov0562
@orlov0562
I'm cool!
Ответ написан
Комментировать
@sanex3339
Ответ написан
Комментировать
DIITHiTech
@DIITHiTech
Fullstack javascript developer
Если пока не использовать ES6, то можно сделать ручками нечто вроде:
jsfiddle.net/DigitalBrain/1detwmvr
/**
      * Attach defaults to function
      * @param {Function} fn function for which the defaults are set
      * @param {Array} defaults function defaults array
      * @param {Number} [count] count of required parameters
      * @param {Object} [context] scope for fn
      * @returns {Function}
      */

     function defaults(fn, defaults, count, context) {
         if (!Array.isArray(defaults))throw TypeError("function defaults must be an array!");
         if(!count)count=0;
         return function () {
             var args = Array.prototype.slice.call(arguments),
                 len = args.length,
                 defLength = defaults.length,
                 index=len-count,
                 callArgs = index>=0 && len < defLength+count ? args.concat(defaults.slice(index)) : args;
             if (count && len < count) {
                 throw TypeError("Function expected at least "+count+" argument"+(count > 1 ? "s" : "")+", but "+len+" were given");
             }
             return fn.apply(context || this, callArgs);
         }
     }

     /**
      *
      * @param a - var1.
      * @param [b=2] - var2.
      * @param [c=3] - var3.
      * @param [d=4] - var3.
      * @type {Function}
      */

     var f=defaults(function(a,b,c,d){
         console.warn(arguments);
     }, [2,3,4], 1);



     f(5, 9, 18, 100);// [5, 9, 18, 100]
     f(5, 9, 18);// [5, 9, 18, 4]
     f(5, 9);// [5, 9, 3, 4]
     f(5);// [5, 2, 3, 4]
     f();// TypeError: Function expected at least 1 argument, but 0 were given


Можно конечно запихнуть это в прототип функции и синтаксис стает приятнее:
var f=function(a,b,c,d){
         console.warn(arguments);
     }.defaults([2,3,4], 1);

...но не совсем гуд так делать
Ответ написан
usdglander
@usdglander
Yipee-ki-yay
function foo(){
name = arguments[0] || 'example';
size = arguments[1] || 102;
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы