2012-10-31 10 views
6

Tại sao trong mã theo dõi Google Analytics, họ có bao bọc các dòng này trong một đóng không?Trong mã theo dõi Google Analytics, tại sao họ sử dụng mã đóng cửa

(function() { 
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; 
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; 
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); 
})(); 

Nó sẽ không hoạt động giống nhau mà không có sự đóng của cha mẹ?

+3

Điều này nhằm tránh gây ô nhiễm không gian tên chung với các biến 'ga' và' s'. – AKX

Trả lời

7

Nó sẽ hoạt động tương tự, nhưng nó có thể dễ dàng phá vỡ các tập lệnh khác trên trang của bạn, nếu bạn đã khai báo một biến với số nhận dạng được sử dụng trong mã Google.

Bằng cách đóng gói khai báo trong một đóng cửa, các biến được phạm vi cho chức năng ẩn danh và không bị rò rỉ phạm vi toàn cầu.

Ví dụ, hãy xem xét ví dụ này với phạm vi mới:

var ga = "something important for my script"; // Not overwritten in this scope 

(function() { 
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; 
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; 
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); 
})(); 

Và ví dụ này mà không có nó:

var ga = "something important for my script"; // Overwritten! 

var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; 
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; 
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); 
3

Nó sẽ làm việc như nhau miễn là không có biến phạm vi toàn cầu được xác định sử dụng cùng tên. Bao bọc mã trong một bao đóng đặt nó trong phạm vi riêng của nó để nó độc lập với bất kỳ mã nào khác trên trang.