2013-05-04 31 views
5

Tôi đã tự hỏi vào tập tin javascript từ nguồn của http://www.google.com thực sự tôi làm điều đó thường xuyên và cố gắng hiểu những gì họ đã làm ở đó. hôm nay tôi đã tự hỏi bên trong các tập tin và tìm thấy một số cuộc gọi chức năng lạ. Có lẽ đó là một điều ngớ ngẩn nhưng tôi thực sự không biết nó là gì và tôi không thể giúp đỡ bằng cách tìm kiếm nó.Javascript: cú pháp này có nghĩa là gì (0, functionName) (functionParemeter);

một thể đọc giống của số-

var someFunction = function(somaeParamenter){ 
    //do some stuffs; 
    return something; 
} 

var someOtherThing = (0, someFunction)(oneParameter); 

Xin tha cho tôi thiếu kiến ​​thức.

EDIT:

Nguồn-

Tôi đang sử dụng chrome. khi đang mở trang http://www.google.com, tôi đã mở công cụ nhà phát triển. sau đó tôi mở tab nguồn và mở tập tin https://www.google.com.bd/xjs/_/js/s/c,sb,cr,cdos,vm,tbui,mb,wobnm,cfm,abd,bihu,kp,lu,m,tnv,amcl,erh,hv,lc,ob,r,rsn,sf,sfa,shb,srl,tbpr,hsm,j,p,pcc,csi/rt=j/ver=WUW4ydIf-wI.en_US./am=gA/d=1/sv=1/rs=AItRSTPu52CumknQsh0was81vrM4inla_w trong trình xem. tệp này là tệp js duy nhất tôi đã thấy ở đó. Tôi đã bật "bản in đẹp" và trong dòng 58, bạn sẽ tìm thấy dấu vết -

_.Va = function(a) { 
      var b = typeof a; 
      if ("object" == b) 
       if (a) { 
        if (a instanceof window.Array) 
         return "array"; 
        if (a instanceof window.Object) 
         return b; 
        var c = window.Object.prototype.toString.call(a); 
        if ("[object Window]" == c) 
         return "object"; 
        if ("[object Array]" == c || "number" == typeof a.length && "undefined" != typeof a.splice && "undefined" != typeof a.propertyIsEnumerable && !a.propertyIsEnumerable("splice")) 
         return "array"; 
        if ("[object Function]" == c || "undefined" != typeof a.call && "undefined" != typeof a.propertyIsEnumerable && !a.propertyIsEnumerable("call")) 
         return "function" 
       } else 
        return "null"; 
      else if ("function" == b && "undefined" == typeof a.call) 
       return "object"; 
      return b 
     }; 

và trong dòng 83 bạn sẽ thấy hàm được gọi.

_.Za = function(a) { 
      return "array" == (0, _.Va)(a) 
     }; 
+1

Bạn có thể trích dẫn nguồn chính xác không? Tôi không thể tìm thấy nó ở những gì tôi nhận được tại địa chỉ: http: // www.google.com/' – Bergi

+1

Lưu ý phụ: JS của Google được tối ưu hóa và rút gọn rất nhiều do đó có lẽ đây không phải là nơi tốt nhất để có ảnh hưởng. – JJJ

+0

@Juhana bạn đúng nhưng tôi không thể cưỡng lại bản thân mình khi nhìn trộm ở đó :) – maksbd19

Trả lời

7
(0, someFunction) 

chỉ đơn giản trả someFunction

vì vậy đây chỉ là tương đương với

var someOtherThing = someFunction(oneParameter); 

Bạn có chắc bạn đã gõ nó chính xác như nó đã được? Nếu vậy, và nếu nó không phải là một loại obfuscation, sau đó nó có thể là kết quả không may của một số minification. Nếu mã thực sự có một chút khác biệt, ví dụ: (0, someObject.someFunction), có thể có một số cách sử dụng này indirect function call.

EDIT:

Bạn chỉnh sửa xác nhận rằng nó mục tiêu là có thể để đảm bảo rằng this, bên trong hàm, là đối tượng toàn cầu (window trong một trình duyệt) và không phải là đối tượng mà Va được đính kèm (_) .

+0

Thay vì '0', họ có thể có một cuộc gọi hoặc chức năng hoặc bất kỳ biểu thức nào khác. – Zirak

+0

'(Potato, tôi nghĩ) nó là kết quả của obfuscation.' – Doorknob

+0

(Dấu ngoặc đơn, và dấu phẩy) rõ ràng (obfuscate, mã) ... –

Các vấn đề liên quan