Für was ist dieser Ansatz? Zum Beispiel aus dem Google OAuth API:Zweck von (0, obj.method) (param1, param2) in Closure Compiler vereinheitlichter Code
(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);
Für mich wäre dies scheint identisch zu sein einfach zu
_.Q("gapi.auth.authorize", _.Ek.Ff);
_.Q("gapi.auth.checkSessionState", _Ek.MH);
...
Ausgeben Ich nehme an, es ist nicht. Was ist der Unterschied?
Der Compiler zwingt das zweite Argument zum Komma-Operator, um als Ausdruck interpretiert zu werden. Wenn wir anstelle von '_.Q' eine anonyme Funktion hätten, würde sie aufgerufen werden (anstatt einen Fehler zu erzeugen). Dies ist der einzige Grund dafür, den ich mir vorstellen kann. – bfavaretto
Können Sie ein Beispiel geben? –
Ich meinte '(0, Funktion (a, b) {}) (" gapi.auth.authorize ", _.Ek.Ff)' ist in Ordnung, aber 'function (a, b) {} (" gapi.auth .authorize ", _.Ek.Ff)' ist nicht (Syntaxfehler). Also könnte der Compiler das hinzufügen, um sicher zu sein, hängt davon ab, was nach der Null geht. In jedem Fall wäre die Null überhaupt nicht notwendig, also habe ich eine andere Schätzung: vielleicht ist es für den Compiler möglich, eval anstelle von _ _Q zu setzen; In diesem Fall würde '(0, eval)' einen indirekten Eval-Aufruf (oder "globales Eval") erzwingen. Siehe http://stackoverflow.com/questions/9107240/1-evalthis-vs-evalthis-in-javascript. – bfavaretto