2010-10-02 34 views
7

Gần đây tôi đã bắt đầu nghiên cứu sâu hơn về JavaScript và đã bắt gặp việc xây dựng mã này trong JQuery.Hiểu mã nguồn jquery

(function(window, undefined) { 
})(window) 

Đọc trên stack overflow (và các nơi khác) Tôi đã đi đến kết luận rằng đây là giống như

function foo(window, undefined) { 
    ... 
} 

foo(window); 

Tôi thích hợp trong giả định của tôi? Nếu có, ưu điểm của cái cũ là gì? (khác với các từ mới khó hiểu)

+0

http://stackoverflow.com/questions/2716069/how-does-this-javascript-jquery-syntax-work-function-window-undefined – user113716

+1

Để ghi lại, không có jQuery trong mã này, nó chỉ là javascript đơn giản. –

+1

Tôi đang cố gắng hiểu jquery; không sử dụng nó nhưng nguồn jquery thực tế, và đó là nơi tôi đã thấy cấu trúc này lần đầu tiên. – Elija

Trả lời

5

Đây là một chức năng ẩn danh. Nó được tạo ra và sau đó đi ra khỏi phạm vi, đây là lợi thế. Nó được tạo ra và khởi tạo ngay lập tức. Điều tốt về điều này là nó sẽ không va chạm với bất kỳ chức năng nào trên không gian tên chung, và do đó sẽ không xóa sạch bất cứ điều gì bạn có thể đã đưa vào trang.

+0

Điều đó có ý nghĩa, đặc biệt khi được kết hợp với liên kết trong câu trả lời dưới đây và nhìn thấy một vài dòng cuối cùng trong jquery trong ngữ cảnh đó. – Elija

16

Có một số điều bạn cần biết để có ý nghĩa của nó:

  1. Đây là một chức năng ẩn danh, mà chỉ đơn giản có nghĩa là nó không có một cái tên.
  2. Chức năng này được gọi ngay sau khi nó được khai báo. Bạn thấy dấu ngoặc đơn mở trên dòng 2, ngay sau định nghĩa hàm? Điều đó có nghĩa là, "gọi hàm này".
  3. Chỉ một tham số được chuyển cho hàm. Tham số đó là "cửa sổ", là tên của phạm vi toàn cục bên trong trình duyệt.
  4. Chức năng được gọi là thực tế mong đợi các thông số * 2 *, nhưng chúng tôi đang gọi nó bằng một. Javascript cho phép bạn gọi các hàm có nhiều hoặc ít tham số hơn hàm thực sự mong đợi. Có nhiều cách để vào danh sách các tham số đã được thông qua.
  5. Vì chúng tôi chỉ chuyển một tham số, tham số thứ hai sẽ tự động được đặt thành "không xác định". "undefined" là một giá trị javascript đặc biệt có nghĩa là, sẵn sàng, "không xác định".
  6. Nó chỉ xảy ra khi chúng tôi cũng có có tên là thông số thứ hai của chúng tôi với tên "không xác định". Vì vậy, trong thực tế, chúng tôi đã tạo ra một biến địa phương (các tham số rất giống với biến cục bộ) là có tên là không xác định và giá trị của nó không được xác định.
  7. Tại sao chúng ta lại làm điều đó? Đó là một cách để đảm bảo rằng, trong chức năng ẩn danh của chúng tôi, nếu chúng tôi đề cập đến "không xác định", nó thực sự sẽ có giá trị "không xác định". Nếu chúng tôi không làm điều đó, và một số mã điên ngoài phạm vi của chúng tôi được xác định lại là "không xác định" (bằng cách nói một cái gì đó như "undefined = 42"), thì chúng tôi sẽ viết mã suy nghĩ chúng tôi đã đề cập đến undefined nhưng chúng tôi thực sự đề cập đến 42. Những shenanigans với tham số đi qua 1 nhưng mong đợi 2, và gọi thứ hai không xác định, bảo vệ chúng ta khỏi vô nghĩa như vậy.

Tôi hy vọng điều đó rõ ràng, hãy cho tôi biết nếu không. Tôi đã học được tất cả những gì từ video của Paul Irish được đề cập ở trên.

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