Javascript Self-вызванные функции

1

Привет, ребята, вы можете объяснить мне различия между этими двумя типами реализаций?

    var vettoreC: Array<number> = [];
        vettoreC = vettoreA;
        this.moda = (function mode(vettoreC) {
          return vettoreC.sort((a, b) =>
            vettoreC.filter(v => v === a).length - vettoreC.filter(v => v === b).length
          ).pop();
        })();

а также

var vettoreC: Array<number> = [];
    vettoreC = vettoreA;
    this.moda = this.calcolaModa (vettoreC);

где calcolaModa

calcolaModa(vettore: Array<number>) {
    return vettore.sort((a, b) =>
      vettore.filter(v => v === a).length - vettore.filter(v => v === b).length
    ).pop();
  }

В первом случае у меня есть эта ошибка:

ERROR TypeError: Cannot read property 'sort' of undefined
    at mode (statistiche.component.ts:145)
    at statisticheComponent.webpackJsonp.128.statisticheComponent.calcolaStatistiche (statistiche.component.ts:148)
    at SafeSubscriber._next (statistiche.component.ts:72)
    at SafeSubscriber.__tryOrUnsub (Subscriber.js:238)
    at SafeSubscriber.next (Subscriber.js:185)
    at Subscriber._next (Subscriber.js:125)
    at Subscriber.next (Subscriber.js:89)
    at MapSubscriber._next (map.js:83)
    at MapSubscriber.Subscriber.next (Subscriber.js:89)
    at CatchSubscriber.Subscriber._next (Subscriber.js:125)

Второй работает правильно.

Что я могу сделать, чтобы выполнить первую реализацию?

Теги:

1 ответ

1
Лучший ответ

В первом примере вам нужно передать аргументы в последних круглых скобках:

this.moda = (function mode(vettoreC) {
    return vettoreC.sort((a, b) =>
    vettoreC.filter(v => v === a).length - vettoreC.filter(v => v === b).length
    ).pop();
})(vettoreC);

Обратите внимание на последнюю строку, где vettoreC упоминается vettoreC.

  • 1
    Спасибо. Оно работает.
  • 0
    @ MarcoNatale Нет проблем, рад помочь!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню