2017-05-31 144 views
1

嗨,大家好,你能解释一下这两种实现之间的区别吗?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

有了第一个例子,你需要传递参数在最后括号:

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再次提到的最后一行。

+1

谢谢。有用。 –

+0

@MarcoNatale没问题,乐意帮忙! –