У меня есть то, что я думаю, это действительно простой вопрос для большинства из вас. Но у меня есть проблемы с тем, чтобы обойти это вокруг. Что означает -1 в аргументе. Длина -1 означает? Это последний пункт? И я - это для уменьшения на 1?

var plus = function() {
var sum = 0;
 for (var i = arguments.length - 1; i >= 0; i--) {
     sum += arguments[i];
 }
  return sum;
 }

console.log(plus(2,2,3,657,5643,4465,2,45,6));
0
hbrovell 20 Авг 2018 в 16:36

3 ответа

Лучший ответ

Когда вы вызываете arguments.length , он вернет вам количество элементов, к которым последний обратился с помощью arguments [arguments.length-1] , так как отсчет начинается с 0. (Первый элемент доступен как этот аргумент [0]).

enter image description here

Вот хорошая документация для Java, но она одинакова для JavaScript: https: //docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html

И да, я ... уменьшает меня на 1. Это разные я - и - я.

Использование ++ / - после операнда

Когда вы используете оператор увеличения / уменьшения после операнда, значение будет возвращено до того, как операнд будет увеличен / уменьшен.

Проверьте этот пример:

// Increment
let a = 1;
console.log(a++);    // 1
console.log(a);      // 2
// Decrement
let b = 1;
console.log(b--);    // 1
console.log(b);      // 0

Когда мы впервые выйдем из системы значения a или b, ни то, ни другое не изменилось. Это потому, что исходное значение операнда возвращается до изменения операнда. При следующем использовании оператора мы получим результат +1 или -1.

Использование ++ / - перед операндом

Если вы предпочитаете делать переменную приращения / уменьшения перед возвратом, вам просто нужно использовать оператор приращения / уменьшения перед операндом:

// Increment
let a = 1;
console.log(++a);    // 2
console.log(a);      // 2
// Decrement
let b = 1;
console.log(--b);    // 0
console.log(b);      // 0

Как вы можете видеть в приведенном выше примере, но с использованием ++ или - перед нашей переменной, операция выполняется и добавляет / вычитает 1 перед возвратом. Это позволяет нам мгновенно выйти из системы и увидеть полученное значение.

1
Comp 20 Авг 2018 в 14:09

Вам нужно знать две вещи здесь:

  1. arguments является типом object, поэтому у него есть пара key-value значений, которые вы передали в качестве аргумента в функцию. Кроме того, объект arguments не является массивом. Он похож на Array, но не имеет Array свойств, кроме length.
  2. key из arguments всегда начинается с 0 и заканчивается на одно значение меньше длины аргументов. См. Пример ниже key заканчивается на 8, поэтому вы делаете arguments.length - 1, чтобы вы получили 8 вместо 9.

И так как вы зацикливаетесь, рассматривая последнее значение первым в arguments, вы делаете --i.

var plus = function() {
  console.log(arguments);
  console.log(typeof arguments);
  var sum = 0;
  for (var i = arguments.length - 1; i >= 0; i--) {
    sum += arguments[i];
  }
  return sum;
}

console.log(plus(2, 2, 3, 657, 5643, 4465, 2, 45, 6));

Кроме того, вы также можете сделать i++ как,

var plus = function() {
  var sum = 0;
  for (var i = 0; i <arguments.length; i++) {
    sum += arguments[i];
  }
  return sum;
}

console.log(plus(2, 2, 3, 657, 5643, 4465, 2, 45, 6));
1
Ankit Agarwal 20 Авг 2018 в 13:39

- 1 означает вычитать 1 из arguments.length. i-- означает уменьшение i на 1.

1
jh314 20 Авг 2018 в 13:38
51931949