Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Вообще ничего не понял в этом коде... (https://javascript.ru/forum/misc/79917-voobshhe-nichego-ne-ponyal-v-ehtom-kode.html)

jaroslav.tavgen 12.04.2020 13:07

Цитата:

Сообщение от voraa (Сообщение 522678)
В первом правиле говорится про токен-нарушитель. Тоесть нечто такое, что делает синтаксическую конструкцию недопустимой.

Но конструкция }[ - вполне допустима

Array.prototype.sum = function (...arguments){returnthis.reduce(arguments);}[1,2,3]

Мы описали какую то функцию. Функция - это объект. К объекту применима операция [] для получения свойства по имени.
[1,2,3] - тут используется операция ',', которая дает значение последнего из выражений (3)
Т.е приведенный выше пример пытается взять значение свойства с именем '3' у объекта функции. Такого нет, поэтому undefined/

Спасибо большое! Офигеть, конечно. Никогда бы не подумал, что это работает именно так.

Почему все тогда почти никогда не ставят точки с запятой после декларации функций? Эта ситуация настолько редкая? Почти все пишут так:

function foo(){
  return 3;
}

без точки с запятой после закрывающей фигурной скобки.

jaroslav.tavgen 12.04.2020 13:11

Цитата:

Сообщение от Nexus (Сообщение 522679)
jaroslav.tavgen, а что вы, собственно, сделать то пытаетесь?
На имплементацию метода «sum» это не похоже, на алиас базового метода «reduce» - тоже.

Алиас метода reduce.
Цитата:

Сообщение от Nexus (Сообщение 522679)
Хотите понять в чем у вас ошибка - дебажте, посмотрите, что у вас находится в переменной «arguments».

Дебагинг помочь не мог, т.к. до входа внутрь функции дело даже не доходило - сразу сообщение об ошибке про undefined.

Я так понял, что моей ошибкой было то, что вместо того, чтобы рассматривать переданный аргумент как функцию (function(args)) я рассматривал его как массив аргументов (function(...args))

Цитата:

Сообщение от Nexus (Сообщение 522679)
P.S. переопределять значение переменной «arguments» - не есть хорошо, лучше подберите своей переменной другое название, например «args»

Спасибо! Буду иметь в виду.

рони 12.04.2020 13:22

Цитата:

Сообщение от jaroslav.tavgen
я рассматривал его как массив аргументов (function(...args))

и правильно делали в данном случае ...
вопрос на засыпку, как используя только Array.prototype.sum и функцию сложения, получить сумму двух массивов?

voraa 12.04.2020 13:23

Цитата:

Сообщение от jaroslav.tavgen (Сообщение 522683)
Почему все тогда почти никогда не ставят точки с запятой после декларации функций? Эта ситуация настолько редкая?

Редкой бывает ситуация, когда оператор начинается с [ или с (

Например

let a= x + y
(a <4 || 8< a)? x+=10 : x-=10

В этом случае будет попытка вызвать функцию y(a <4 || 8< a)
или
let f = function () {...}
(a <4 || 8< a)? x+=10 : x-=10

То же - определили функцию и сразу пытаемся ее вызвать

SuperZen 12.04.2020 13:23

зачем здесь деструктор?
Array.prototype.sum = function (...arguments)


еще пример:
return true

и
return
true

рони 12.04.2020 13:29

jaroslav.tavgen,
как используя только Array.prototype.sum и функцию сложения, получить сумму двух массивов?
const fn = (a,b)=>a+b;
const a = [1,2,3];
const b = [4,5,6];
Array.prototype.sum = function(...args){ return this.reduce/* ... */};

console.log( /* ... */)//21

voraa 12.04.2020 13:29

Цитата:

Сообщение от рони (Сообщение 522686)
вопрос на засыпку, как используя только Array.prototype.sum и функцию сложения, получить сумму двух массивов?

А функция сложения это что?

рони 12.04.2020 13:37

Цитата:

Сообщение от voraa
А функция сложения это что?

fn = (a,b)=>a+b;
и наверно задание скорее для начинающих.

jaroslav.tavgen 12.04.2020 13:43

Цитата:

Сообщение от рони (Сообщение 522689)
jaroslav.tavgen,
как используя только Array.prototype.sum и функцию сложения, получить сумму двух массивов?
const fn = (a,b)=>a+b;
const a = [1,2,3];
const b = [4,5,6];
Array.prototype.sum = function(...args){ return this.reduce/* ... */};

console.log( /* ... */)//21

const a = [1,2,3];
const b = [4,5,6];
Array.prototype.sum = function(arg){ return [...this, ...arg].reduce((acc,val)=>acc+val, 0)};

console.log(a.sum(b));

если я правильно понял задачу, конечно...

рони 12.04.2020 13:46

Цитата:

Сообщение от jaroslav.tavgen
если я правильно понял задачу

направление правильное, но куда делись строки 1 и 4 из задания?


Часовой пояс GMT +3, время: 18:16.