2015-01-25 16 views
6

Tôi đã tìm thấy đoạn mã này:mã javascript Strange

;  
100% function($) {          // WTF? 
    var _true_ = true;         // WTF? 
    var _false_ = false;         // WTF? 
    var go = function(location, date) { 
     location || (location = {}); 
     var result = _false_; 
     if (date && date.day) {  
      result = geoService.go(location, date); 
     } 
     return !!result;    
    } 
    var process = function(func) { 
     var args = [].prototype.slice.call(arguments, 1); 
     return function() {        
      return func.apply(this, args); 
     } 
    } 
    // ... 
}(jQuery, undefined);          

Tại đây: http://www.dofactory.com/products/javascript-jquery-design-pattern-framework (xin lỗi, không có id-s đã được tìm thấy trên trang)

Tôi không hiểu những gì các bộ phận được thực hiện:

  1. "100%" trong dòng thứ hai
  2. các var _true_ = true;var _false_ = false; bài tập trong 3-4 dòng

Tôi tò mò, mục đích của chúng là gì.

Trả lời

9

"100%" trong dòng thứ hai

Đó là số 100 theo sau là một nhà điều hành mô đun. Nó không được sử dụng cho bất cứ điều gì (kể từ khi kết quả không bị bắt) khác hơn là để buộc phía bên tay phải được coi là biểu thức hàm thay vì khai báo hàm.

Đó là một cách tiếp cận rất không phổ biến và không trực quan mà tôi chưa bao giờ thấy trước đây.

Thông thường, việc quấn biểu thức chức năng theo tỷ lệ hoặc trước nó bằng toán tử không phải là bình thường.

var true = true; và var false = false; bài tập trong 3-4 dòng

Tác giả dường như cố gắng gây sự chú ý đến việc sử dụng của truefalse bằng cách sao chép chúng để biến mang những đặc điểm numerica phi-alpha trong tên thay vì sử dụng các chữ trong suốt. Một lần nữa, điều này rất kỳ quặc và không phải cái gì tôi từng thấy trước đây.

6

Dường như đó là tập hợp các "thực tiễn tốt nhất" được sử dụng sai không dẫn đến ngoại lệ nhưng chắc chắn là lẻ và bị che khuất. Nhìn vào dòng thứ hai và cuối cùng. Có thực hành tốt nhất được sử dụng chính xác ngược lại:

(function ($, undefined){ 
    // do the stuff 
})(jQuery); 

undefined đây sẽ là thực không xác định bởi vì khi cuộc gọi hàm không có đối số thứ hai. Nhưng những gì trên trái đất có thể là lý do vượt qua đối số "không xác định" cho hàm và không sử dụng nó? Nó trông giống như một trò đùa.

Điều tương tự ở trên 5 dòng: có vẻ (và thực sự hoạt động) là "đối số mặc định" được gán nhưng được thực hiện theo cách lạ (theo truyền thống và rõ ràng hơn được sử dụng là location = location || {};). Tôi tin rằng chỉ có những lý do để viết nó theo cách mà nó thực hiện có thể là obfuscation, trò đùa hoặc sự hiểu lầm.

Điều tương tự là với 100%. Bạn có thể sử dụng bất kỳ toán tử nào để biểu thị hàm. Cách phổ biến nhất là sử dụng dấu ngoặc đơn.Nhưng thường thì bạn cũng có thể đáp ứng:

!function(){ 

}(); 

hay:

+function(){ 

}(); 

nhưng bạn cũng có thể viết

42 * function(){ 

}(); 

nó tất cả các hoạt động theo cùng một cách duy nhất ngoặc là rõ ràng nhất và phổ biến.