Bu yaklaşım nedir? Örneğin, Google OAuth API: Bana göre(0, obj.method) (param1, param2) 'in amacı Kapanış Derleyici minified 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);
, bu sadece ben değil tahmin ediyorum
_.Q("gapi.auth.authorize", _.Ek.Ff);
_.Q("gapi.auth.checkSessionState", _Ek.MH);
...
çıkışı aynı olacak gibi görünüyor. fark nedir?
Derleyici, ikinci bağımsız değişkeni ifade olarak yorumlanacak virgül operatörüne zorluyor. Eğer _.Q' yerine anonim bir işlevimiz olsaydı, (hata atmak yerine) çağrılırdı. Düşünebildiğim tek nedeni bu. – bfavaretto
Bir örnek verebilir misiniz? –
Yani (0, işlev (a, b) {}) ("gapi.auth.authorize", _.Ek.Ff) 'diyorum, fakat işlev (a, b) {} (" gapi.auth " .authorize ", _.Ek.Ff)" (sözdizimi hatası) değil. Yani derleyici güvenli olmak için ekliyor olabilir, sıfırdan sonra ne olduğuna bağlı. Her halükarda, sıfır gerekli olmayacaktı, bu yüzden şimdi başka bir tahminde bulunacağım: belki de derleyicinin '_.Q' yerine' eval 'koyması mümkün; bu durumda, “(0, değerlendirme)” dolaylı bir değerlendirme çağrısı (ya da “küresel değerlendirme”) zorlar. Http://stackoverflow.com/questions/9107240/1-evalthis-vs-evalthis-in-javascript adresine bakın. – bfavaretto