номер параметра функции в javascript [дубликат]

Это вызывает головные боли, поэтому я обновил решение, которое будет работать с использованием самых распространенных аппаратных и программных инструментов, доступных пользователям в декабре 2014 года. Обратите внимание, что JDK / SDK / JRE / Netbeans и их последующие классы, компиляторы библиотек шаблонов, редакторы и debuggerz являются бесплатными.

Эта программа была протестирована с Java v8 u25. Это было написано и построено с использованием Netbeans IDE 8.0.2, JDK 1.8, OS - win8.1 (извинения), а браузер - Chrome (с двойными извинениями) - предназначен для помощи в решении OG UNIX-cmd-линии с современным графическим интерфейсом IDE в ZERO COST - поскольку информация (и IDE) всегда должна быть бесплатной. По Tapper7. Для всех.

кодовый блок:

  пакет modchk;  // Требование Netbeans.  import java.util.Scanner;  // import java.io. *;  не требуется. Netbeans автоматически включает его.  public class Modchk {public static void main (String [] args) {int input1;  int input2;  // Explicity определяет цель .exe для пользователя: System.out.println («Modchk by Tapper7». Тесты IOStream и basic bool modulo fxn. \n "+" Комментировали и кодировали для программистов на C / C ++, новых для Java \n  «);  // создаем объект, который читает целые числа: Scanner Cin = new Scanner (System.in);  // следующее будет throw (), если вы не сделаете то, что он вам сообщает, или если // int введено == ArrayIndex-out-of-bounds для вашей системы.  + - ~ 2.1e9 System.out.println ("Введите целочисленный wiseguy:");  input1 = Cin.nextInt ();  // эта команда эмулирует "cin & gt; input1;";  // Я тестирую, как Эрни Бэнкс играл в тяжелый шар: «Давайте играть два!»  System.out.println ("Введите другое целое ... anyday now:");  input2 = Cin.nextInt ();  // отлаживаем сканер и istream: System.out.println («1-й N, введенный пользователем, был« + input1);  System.out.println («второй N, введенный пользователем, был« + input2);  // «делать математику» на vars, чтобы убедиться, что они мне полезны: System.out.println («modchk for» + input1);  if (2% input1 == 0) {System.out.print (input1 + "равно \n");  // & lt; --- тот же эффект вывода, что и * .println} else {System.out.println (input1 + "нечетно");  } // endif input1 // one mo '' gain (как в istream dbg chk выше) System.out.println («modchk for» + input2);  if (2% input2 == 0) {System.out.print (input2 + "равно \n");  } else {System.out.println (input2 + "нечетно");  } // endif input2} // end main} // end Modchk  
9
задан wwaawaw 2 October 2012 в 17:05
поделиться

4 ответа

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

Для встроенных функций, которые коррелируют с собственным кодом, это зависит от .

Вы спросили, от чего это зависит:

Давайте посмотрим на раздел ECMA-262

15 о встроенных (не путать с host ) вообще функциями

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

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

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

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

Вы говорили прямо о DOM, а не о встроенных функциях. Честно говоря, я не могу найти соответствующие части спецификации. Специфика ECMA намного проще читать, чем веб-сайт w3.

14
ответ дан Prinzhorn 15 August 2018 в 22:31
поделиться
  • 1
    & Quot; зависит от & Quot; на ЧТО ? – wwaawaw 3 October 2012 в 02:26
  • 2
    @adlwalrus Проверить обновленный ответ – Prinzhorn 3 October 2012 в 12:31
  • 3
    Таким образом, функции DOM будут функциями хоста, а не встроенными функциями, правильно? – wwaawaw 3 October 2012 в 13:11
  • 4
    И BTW, спасибо! Отличный ответ. – wwaawaw 3 October 2012 в 13:12
  • 5
    Да, это правильно. DOM - это объекты / функции хоста. Спецификация ECMA говорит «объект-хост: объект, предоставленный средой-хозяином, для завершения среды выполнения ECMAScript». DOM не является частью самого JavaScript. – Prinzhorn 3 October 2012 в 13:55

Попробуйте взглянуть на эту сообщение и, возможно, на эту .

Из MDN :

Объект arguments является локальной переменной, доступной во всех функциях; arguments как свойство функции больше нельзя использовать.

Вы можете ссылаться на функцию arguments в функции, используя объект arguments. Этот объект содержит запись для каждого аргумента, переданного функции, индекс первой записи, начинающийся с 0.

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

function myConcat(separator) {
  var result = "";

  // iterate through non-separator arguments
  for (var i = 1; i < arguments.length; i++) {
    result += arguments[i] + separator;
  }

  return result;
}
0
ответ дан Community 15 August 2018 в 22:31
поделиться
  • 1
    Просто используйте [].slice.call(arguments, 1).join(separator)? – Bergi 2 October 2012 в 17:23
  • 2
    Я привел пример из ссылки MDN, чтобы просто показать, что было возможно. Я не сомневаюсь, что есть лучшие решения для функции myConcat. знак равно – Chase 2 October 2012 в 17:24
  • 3
    Хорошо, я вижу это ... – Bergi 2 October 2012 в 17:31
  • 4
    Правильно, я знаю, что это верно для встроенных функций JS. Но как насчет & quot; [compiled code] & quot; методов DOM и особенно в IE? – wwaawaw 3 October 2012 в 02:30

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

4
ответ дан Diogo Schneider 15 August 2018 в 22:31
поделиться
  • 1
    Я просто не уверен, если материал станет более жестким, когда вы имеете дело с скомпилированным & quot; [native code] & quot; методов DOM. – wwaawaw 3 October 2012 в 02:18

Я не думаю, что это что-то испортит, если вы явно не используете массив неявных аргументов. Почему вы это делаете?

0
ответ дан Jordan Denison 15 August 2018 в 22:31
поделиться
  • 1
    Я предполагаю, что это должно быть общим с функциями, которые принимают другие функции в качестве аргументов. Например, встроенный метод Array.Prototype.forEach () попытается передать три аргумента переданной функции, даже если вы определяете ее как принимающую только один или два аргумента (что в большинстве случаев). – o'rety 28 September 2017 в 12:18
Другие вопросы по тегам:

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