В JavaScript, как я могу создать функцию с дополнительным параметром?

Если вы не против использовать решение jQuery, вы можете попробовать плагин TextFill

jQuery TextFill изменяет размер текста, чтобы он вписывался в контейнер и делал размер шрифта как можно большим.

blockquote>

https://github.com/jquery-textfill/jquery-textfill

26
задан Sinan Ünür 8 February 2010 в 14:58
поделиться

9 ответов

Первый обнаруженный мной ответ Google:

http://www.tipstrs.com/tip/354/Using-optional-parameters-in -Javascript-functions

Я не встречал случаев, когда вопросительный знак использовался бы для предупреждения вызывающего абонента о необязательном параметре. Хотя это сделано на других языках, я не думаю, что это необходимо в javascript.

Фактически, кажется, что вы не можете использовать вопросительный знак в имени переменной . Только буквы, цифры, $ и _.

1
ответ дан 28 November 2019 в 06:16
поделиться

В Javascript нет синтаксиса, который указывает, что параметр является необязательным (или обязательным). Все параметры являются необязательными. Если они не указаны, они undefined, поэтому вам нужно проверить это. Например, эта функция фактически создаст для параметра значение по умолчанию, равное 10:

function myfunc(someParam) {
  if (someParam === undefined) {
    someParam = 10;
  }
  ...
}

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

Наконец, если у вас более 3-4 параметров, обычно рекомендуется использовать анонимный объект.

60
ответ дан Andrew Luhring 28 November 2019 в 06:16
поделиться

На самом деле, все параметры являются необязательными в функциях JS. Нет предупреждения или ошибки, если вы пропустите параметр.

Вы можете установить значения по умолчанию, такие как

function throw_cat(dist){
  dist = typeof dist=='undefined' ? 20 : dist;
   //OR
  dist = dist || 20; //this will assign it to 20 if you pass 0 or another 'falsy' value, though. May be good if you expect a string. String '0' stays, '' or null assigns the default
  //etc...
  }
6
ответ дан JAL 28 November 2019 в 06:16
поделиться

Вы можете использовать аннотации, такие как {Object =} или {number =}, в разделе комментариев при использовании доклета:

/** 
 * @param {object=}xyz
 */ 

Современная IDE знает, как распознавать аннотации для JavaScript, и показывает вам указания на потенциальные проблемы в вашем коде.

Пример:

/**
 *
 * @param query 
 * @param callback 
 * @param {number=} ttl optional time-to-leave
 */
 loadByJSONP:function loadByJSONP(query, callback, ttl) {
   ...do some work
 }

В этом примере «ttl» является необязательным. аннотация {число =} указывает IDE, что этот параметр является необязательным. Соответственно, когда вы вызываете эту функцию только с двумя параметрами, вы не получите предупреждение.

Аннотации также могут использоваться для обозначения ожидаемого типа. это делает ваш код лучше и менее подвержен ошибкам. Вот ссылка для аннотаций:

https://developers.google.com/closure/compiler/docs/js-for-compiler

4
ответ дан Gilad 28 November 2019 в 06:16
поделиться

Во-первых, все, кто пишет JavaScript, делают себе одолжение и проходят Изучение продвинутого JavaScript из Джона Резига .

function myFunc(arg1, arg2 /* varargs... */) {
  var optional = Array.prototype.slice.call( arguments, 2 );

Каждый параметр функции является «необязательным», даже тот, который вы объявляете в списке параметров объявления функции.

Просто рассмотрите документирование их хорошо.

3
ответ дан nicerobot 28 November 2019 в 06:16
поделиться

Клетус и Дамовиза сделали хорошие предложения. Я также хотел бы добавить, что некоторые (например, я) могут предпочесть такую ​​запись:

function foo(/*bar*/) {
   if (arguments.length == 1) {
      var bar = arguments[0];
      ...
   }
}

Это служит для того, чтобы документировать разработчикам вашей кодовой базы, что аргумент является необязательным, и также документирует имя, но также предотвращает отображение аргумента в имени функции в отладчике (пример будет отображаться как foo () , а не foo (необязательный_аргумент) . В противном случае разработчики, использующие API) Можно предположить, что это было необходимо.

Редактировать: Это особенно полезно для необязательных аргументов, которые предназначены для внутреннего использования.

2
ответ дан Bryan Matthews 28 November 2019 в 06:16
поделиться

Правильно ли использовать a? пометить как Ruby в объявлении функции

Нет, языкового способа обозначения необязательного аргумента нет. Я определенно думаю, что это стоит указать в комментарии, однако:

function myFunc(var1, var2 /* optional */, var3 /* optional */) {
    if (var2===undefined) ...

(Обратите внимание на тройное равенство для точного тестирования на равенство. В противном случае переданное значение null также будет соответствовать. Обычно вы хотите, чтобы === для большинство сравнений в JS, так как двойное равенство нежелательно слабо типизировано.)

Поскольку, когда у вас есть неопределенное количество необязательных аргументов, вы обычно опускаете их в операторе функции, и снова комментарий вежливый:

function myFunc(var1 /* , optional var2..varN */) {
    for (var i= 1; i<arguments.length; i++) ...
1
ответ дан bobince 28 November 2019 в 06:16
поделиться

Некоторые источники советуют вам полностью пропустить параметры и вместо этого использовать массив аргументов. Это позволяет вам принимать любые входные данные, предоставленные вашей функции, и вы можете решить, как реагировать на аргументы, переданные вашей функции, по своему усмотрению.

Подробнее об этом можно прочитать здесь: http://www.devguru.org/technologies/ecmascript/quickref/arguments.html

2
ответ дан 28 November 2019 в 06:16
поделиться

Просто не определяйте функцию с какими-либо параметрами и обращайтесь к массиву специальных аргументов изнутри функции, в которой должны быть необязательные параметры. Пример ниже.

<HTML>
<HEAD>
<SCRIPT Language="JavaScript">
function foo() {
  var argv = foo.arguments;
  var argc = argv.length;
  for (var i = 0; i < argc; i++) {
    alert("Argument " + i + " = " + argv[i]);
   }
}
</SCRIPT>
</HEAD>
<BODY onload="foo('hello', 'world');">
</BODY>
</HTML>
1
ответ дан 28 November 2019 в 06:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: