Ребята, мне нужна ваша помощь, посмотрите на этот скрипт:

function findMax() {
  var i;

  var max = -Infinity;

  for (i = 0; i < arguments.length; i++) {
    if (arguments[i] > max) {
      max = arguments[i];
    }
  }

  return max;
}

document.getElementById("demo").innerHTML = findMax(4, 5, 10);

Результат = 10

Вопрос в том, как программа знает, какое число из трех аргументов входит в аргумент [i]? Я не вижу, чтобы он где-либо давал ему значение, и он каким-то образом сравнивает этот массив с переменной «max», чтобы узнать максимальное число. Надеюсь, кто-нибудь сможет это объяснить.

1
mentalsadist 29 Авг 2017 в 22:31

8 ответов

Лучший ответ

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

Как указано более формально, здесь:

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

function test(){
    for(var i = 0; i<arguments.length; i++){
       console.log(arguments[i]);
    }
}

test('a');
test(1,2,3);
2
Christos 29 Авг 2017 в 19:34

Вопрос в том, как программа знает, какое число из трех аргументов входит в аргумент [i]?

Это определяется во время выполнения. Объект arguments создается автоматически и динамически, когда происходит вызов.

Я не вижу, чтобы он где-либо давал ему значение, и он каким-то образом сравнивает этот массив с переменной «max», чтобы узнать максимальное число.

Его членами будет точное количество аргументов. Если вы передадите 3 аргумента, он будет создан с членами 0, 1 и 2, ссылающимися на эти три аргумента.

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

0
spanky 29 Авг 2017 в 19:35

Вопрос в том, как программа знает, какое число из трех аргументов входит в аргумент [I]?

Потому что это то, что вы просите это сделать ;-)

Как указывалось выше, у MDN есть отличная страница, описывающая, что такое массив arguments, как получить доступ к каждому из его элементов, а также способы манипулирования массивом arguments.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments

Возвращаясь к вашему коду, цикл for выполняет итерацию по массиву arguments, поэтому эта строка:

if (arguments[i] > max) {

На самом деле говорит:

if (arguments[4] > max) {
if (arguments[5] > max) {
if (arguments[10] > max) {

На каждой итерации указывается длина массива аргументов (которая в данном случае равна 3)

0
TheTechy 29 Авг 2017 в 19:47

arguments объект является внутренним, автоматическим значением внутри любой функции. Объект является like массивом фактических параметров, переданных функции при вызове.

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

0
Pointy 29 Авг 2017 в 19:33

arguments объект представляет собой объект в виде массива, соответствующий аргументам, переданным функции.
Среди прочего, он содержит свойство length, которое представляет собой число аргументов, переданных функции, и свойство [@@iterator], где like для array: arguments[i] содержит и ссылается на элемент в индексе i.

Документация по функциям дает более подробную информацию:

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

arguments[0]
arguments[1]
arguments[2]
0
davidxxx 29 Авг 2017 в 19:37

См. https://developer.mozilla.org/en / Docs -американские / Web / JavaScript / Справочные материалы / Функции / аргументы

Для объяснения аргументов объекта.

Это делается автоматически Javascript. Аргументы помещаются в массив в том порядке, в котором они переданы функции.

0
Zackary Murphy 29 Авг 2017 в 19:34

Прочитайте это: https://developer.mozilla.org/it / документы / Web / JavaScript / Справочные материалы / Функции / аргументы

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

0
Mario Catillo 29 Авг 2017 в 19:35