A cosa serve questo approccio? Per esempio, dal API di Google OAuth:Scopo di (0, oggetto) (param1, param2) nel codice minatore compilatore di chiusura
(0, _.Q)("gapi.auth.authorize", _.Ek.Ff);
(0, _.Q)("gapi.auth.checkSessionState", _.Ek.MH);
(0, _.Q)("gapi.auth.getAuthHeaderValueForFirstParty", _.Ek.Qe);
(0, _.Q)("gapi.auth.getToken", _.Ek.$f);
(0, _.Q)("gapi.auth.getVersionInfo", _.Ek.Wk);
(0, _.Q)("gapi.auth.init", _.Ek.gb);
(0, _.Q)("gapi.auth.setToken", _.Ek.Ym);
Per me, questo sembra essere identico a quello semplicemente l'output
_.Q("gapi.auth.authorize", _.Ek.Ff);
_.Q("gapi.auth.checkSessionState", _Ek.MH);
...
sto supponendo che non è. quindi qual è la differenza?
Il compilatore impone il secondo argomento all'operatore virgola da interpretare come espressione. Se invece di '_.Q' avessimo una funzione anonima, sarebbe invocata (invece di lanciare un errore). Questa è l'unica ragione per cui posso pensare. – bfavaretto
Puoi fare un esempio? –
Intendevo '(0, funzione (a, b) {}) (" gapi.auth.authorize ", _.Ek.Ff)' è ok, ma 'function (a, b) {} (" gapi.auth .authorize ", _.Ek.Ff)' non lo è (errore di sintassi). Quindi il compilatore potrebbe aggiungere che per essere sicuro, dipende da cosa va dopo lo zero. In ogni caso, lo zero non sarebbe affatto necessario, quindi ora ho un'altra ipotesi: forse è possibile che il compilatore metta 'eval' invece di '_.Q'; in questo caso, '(0, eval)' costringerebbe una chiamata eval indiretta (o "eval globale"). Vedi http://stackoverflow.com/questions/9107240/1-evalthis-vs-evalthis-in-javascript. – bfavaretto