2012-09-11 43 views
5

Tôi đang đọc một cuốn sách trên JavaScript giải thích cách sử dụng mẫu MVC với các ứng dụng JavaScript. Trong mã này, nó cho thấy làm thế nào để thiết lập một bộ điều khiển. Bất cứ ai có thể giải thích lý do tại sao ký hiệu đô la jQuery được thông qua như một tham số cho hàm trong dòng 3, và sau đó tại sao không có dấu đô la nào ở phía trước (jQuery) trong dòng cuối cùng?

var Controller = {}; 
// Use a anonymous function to enscapulate scope 
(Controller.users = function($){ 
    var nameClick = function(){ 
     /* ... */ 
    }; 

    // Attach event listeners on page load 
    $(function(){ 
     $("#view .name").click(nameClick); 
    }); 
})(jQuery); 
+0

Thụt lề thích hợp có thể giúp bạn hiểu những gì đang diễn ra. –

+0

@KevinB nếu cuối cùng (jQuery) là trong thực tế gọi chức năng, không nên nó được trên dòng riêng của mình? – Leahcim

+0

không, '(jQuery)' đang truyền 'jQuery' làm đối số cho hàm được lưu trữ trong' Controller.users'. Bạn không chia thành hai dòng này phải không? 'alert (" Hello World! ")' –

Trả lời

6

Không có ký hiệu đô la trước jQuery trong dòng cuối cùng bởi vì tên của biến chứa jQuery là jQuery, không $jQuery. Nó được chuyển ngay lập tức dưới dạng $ để tránh xung đột đặt tên.

+1

vậy là (jQuery); gọi hàm ẩn danh? hãy giải thích nếu bạn có thể. Tôi là một chút thiếu kinh nghiệm (mặc dù tôi đã đọc một vài cuốn sách về nó) – Leahcim

+1

@Michael: Yup! (Nó không thực sự vô danh, mặc dù; nó được gán cho 'Controller.users'.) – Ryan

1

jQuery được chuyển đến hàm đang cung cấp đối số cho $ trong hàm. Nói cách khác, để đảm bảo rằng hàm hiểu rằng $ là đối tượng jQuery, tên đối tượng đầy đủ của jQuery được chuyển thay vì phím tắt $. Điều này giúp trong trường hợp các thư viện javascript khác đang được sử dụng và có thể cạnh tranh cho việc gán $.

2

Nói một cách đơn giản, đảm bảo không có gì khác được đặt tên là $ trong ngữ cảnh đó.

Biến jQuery có tên là jQuery, $ là một biểu tượng hợp lệ trong tên biến và jQuery đã sử dụng nó để lưu trữ đối tượng jQuery. Mã ở trên có thể dễ dàng được viết lại để sử dụng bất kỳ tên biến nào khác thay vì $

var Controller = {}; 
// Use a anonymous function to enscapulate scope 
(Controller.users = function(myJQueryVariable){ 
    var nameClick = function(){ 
     /* ... */ 
    }; 

    // Attach event listeners on page load 
    myJQueryVariable(function(){ 
     myJQueryVariable("#view .name").click(nameClick); 
    }); 
})(jQuery); 
Các vấn đề liên quan