2013-10-23 13 views
20

Bazen google.com ana sayfasıyla birlikte verilen js'ye baktım ve (0, obj.func)(args) sözdizimini kullanma eğilimindeydiler. Komut dosyasından alıntılar:Neden google ana sayfası (0, obj.func) (args) sözdizimini kullanıyor?

var _ = _ || {}; 
(function (_) { 
    var window = this; 
    try { 
     _.mb = function (a) { 
      return (0, window.decodeURIComponent)(a.replace(/\+/g, " ")) 
     }; 
     _.zg = function (a, b) { 
      for (var c = a.length ? a.split("&") : [], d = 0; d < c.length; d++) { 
       var e = c[d]; 
       if ((0, _.Ag)(e) == b) return (c = /=(.*)$/.exec(e)) ? (0, _.mb)(c[1]) : null 
      } 
      return null 
     }; 
     _.Ag = function (a) { 
      return (a = /^(.+?)(?:=|$)/.exec(a)) ? (0, _.mb)(a[1]) : null 
     }; 
     var Cg = function (a, b) { 
       var c = a.indexOf("?"); 
       return 0 > c ? null : (0, _.zg)(a.substring(c + 1), b) 
      }; 
     // Note var Cg called with no 0 
     var oca = function (a) { 
       this.A = Cg(a, "mods"); 
       this.B = Cg(a, "ver") 
      }; 
    } catch (e) {} 
})(_); 

Neden 0?

+4

olası yinelenen bir [JavaScript sözdizimi (0, fn) (prmtr)] (http://stackoverflow.com/questions/11541134/javascript-syntax-0-fnargs) – JJJ

+0

Ah , garip, ben gerçekten bu google, ama bu soru ile karşılaşmadım ... –

+6

@Juhana ama bu sefer gerçek bir cevap var, sadece comma operatörünün açıklama;) – pawel

cevap

33

Bu, indirect call yapar.

Bu, çağrılan işlevde içeriğin genel olanı sağlamasını sağlar. Bu dahili bir kapsamda yararlı olabilir.

Örnek:

var a = { 
    b: function(){ 
    console.log(this);  
    }, 
    c1: function(){ 
    this.b(); 
    }, 
    c2: function(){ 
    (0, this.b)(); 
    } 
} 
a.c1(); // logs a 
a.c2(); // logs window 
+2

Bu cevap, bu kopyadan farklı görünüyor ... Ama bu davranışı tarif eden belgeler tam olarak nerede? –

+1

Bu kodun muhtemelen başka bir kaynaktan üretildiğini unutmayın, bu yüzden bir optimizer/minifier/neyin bir sonucu olduğunu ve muhtemelen programcılar tarafından bu şekilde yazılmadığını tahmin ediyorum. – pawel

+0

Bu ve '0' hemen hemen herhangi bir şeyle değiştirilebilir mi? '(this, this.b)(); – MackieeE

İlgili konular