Функция обязательных и не обязательных переменных - PullRequest
3 голосов
/ 07 сентября 2010

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

function myFunction(myDefaultVariable, myOtherVariable, myCheckVariable = "basic"){
    // so yeah, myDefaultVariable is required always,
    // same applies for myOtherVariable,
    // and myCheckVariable can be skipped in function call, because it has a default value already specified.
}

Есть ли что-то похожее на это в JavaScript?

Ответы [ 3 ]

9 голосов
/ 07 сентября 2010

Вам не нужно передавать все переменные в Javascript.

Хотя менее хакерский способ - использовать объекты:

function foo(args) {
    var text = args.text || 'Bar';

    alert(text);
}

Для вызова:

foo({ text: 'Hello' }); // will alert "Hello"
foo(); // will alert "Bar" as it was assigned if args.text was null
4 голосов
/ 07 сентября 2010

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

optionalArg = (typeof optionalArg == "undefined")?'defaultValue':optionalArg

Обратите внимание, что подобная методика работает, даже если опцияручный аргумент указан, но оценивается как ложный - что-то, что не подходит для такой простой идиомы, как optionalArg=optionalArg || 'default'.

Также внутри каждой функции вы можете получить доступ к массиву, называемому arguments , который будет содержать все аргументы, переданные функции, вы можете использовать это, чтобы иметь функции со списками аргументов переменной длины.

1 голос
/ 07 сентября 2010

Ничего из того, что мне известно:

Но есть 2 способа решения этой проблемы.

//1. function.arguments - this is advisable if you don't know the 
//   maximum number of passed arguments.

function foo() {
  var argv = foo.arguments;
  var argc = argv.length;
  for (var i = 0; i < argc; i++) {
    alert("Argument " + i + " = " + argv[i]);
   }
}

foo('hello', 'world');

//2. "Or" operator - this is good for functions where you know the
//   details of the optional variable(s).

function foo (word1, word2) {
   word2 = word2 || 'world';
   alert (word1 + ' ' + word2);
}

foo ('hello'); // Alerts "hello world"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...