Javascript自调用函数

时间:2017-05-31 09:00:18

标签: javascript

大家好,您能解释一下这两种实现之间的区别吗?

    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 个答案:

答案 0 :(得分: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的最后一行。