2012-02-06 37 views
6

Tôi nhận được tất cả các mã bổ sung ngoại trừ một dòng và do cách công cụ tìm kiếm hoạt động, tôi không thể tìm kiếm câu hỏi của mình.Cần trợ giúp để hiểu các plugin bổ trợ bootstraps của Twitter (jQuery)

Câu hỏi đặt ra là những gì trong địa ngục này là:

(!function($) {/*....*/})(jQuery); 

Tại sao nó nói chức năng ($) ?? Tôi đoán cho cùng một hiệu ứng của $.noConflict() nhưng không phải là lý do tại sao chúng tôi chỉ sử dụng (function($) {/*...*/})(jQuery); nó chỉ kết thúc tốt đẹp ký hiệu đô la cho khối chức năng của chúng tôi. Tôi hoàn toàn nhận thức được rằng tôi có thể thoát khỏi cơ sở ở đây, tôi vẫn còn trung gian trong jQuery/js.

Nếu ai đó có thể vui lòng khai sáng cho tôi về ảnh hưởng của toán tử NOT trước câu lệnh hàm, tôi sẽ đánh giá cao điều đó.

Sửa: Nó sẽ xuất hiện mà tôi bỏ qua bootstrap không có (!function($) ...) nhưng chỉ là !function($)... nhưng các bạn đã giúp tôi trong việc thực hiện nó chỉ là một thay thế cho()

+0

Tôi chưa từng thấy điều đó trước đây. –

+0

@LightnessRacesinOrbit yea hãy kiểm tra http://twitter.github.com/bootstrap/assets/js/bootstrap-tooltip.js – dhazelett

+0

Kết quả đầu tiên trên Google cho "định nghĩa hàm dấu chấm than javascript" là .... –

Trả lời

3

Vì vậy, có một cặp vợ chồng mọi thứ đang diễn ra ở đây. Mọi thứ đang được bao bọc trong một hàm ẩn danh được thực thi ngay lập tức. Điều này là để tạo ra một phạm vi cho thư viện để khi tác giả tuyên bố các hàm và biến chúng không phải là toàn cầu theo mặc định.

Với tôi cho đến nay. Ok điều tiếp theo là toàn bộ điều ($){...}(jQuery). Điều đang diễn ra ở đây là tác giả đang chuyển thư viện jQuery vào hàm bao bọc ẩn danh dưới dạng thông số được gọi là $. Vì vậy, trong phạm vi chức năng ẩn danh, anh ta có thể sử dụng $ để tham chiếu jQuery như bạn mong đợi. Đây là một điều thực hành tốt nhất bởi vì 99% thời gian jQuery đã được định nghĩa là $ trong phạm vi toàn cầu, nhưng nó được coi là dạng xấu để chỉ các biến toàn cầu trong phạm vi chức năng, và do đó anh ta/cô ta chuyển nó thành tham số.

Vẫn còn đó? Dấu chấm than: có một quy tắc trong Javascript cho biết dòng đầu tiên của một chương trình PHẢI là một biểu thức (nghĩa là không phải là một tuyên bố hàm khai báo aka). Bằng cách thêm trước! tác giả đang chuyển tuyên bố thành một biểu thức (trả về false). Trong trường hợp này tuy nhiên tôi không nghĩ rằng! thực sự được yêu cầu vì khai báo được bao bọc trong() và được thực thi ngay lập tức. (Một cuộc gọi hàm là một biểu thức)

+0

Thật vậy, nó đã là một biểu thức; '!' là thừa. Đó là một _alternative_ để gói khai báo trong parens, nhưng tác giả đã làm cả hai vì một lý do nào đó. Và tôi không biết bạn đang nói gì khi nói về dòng đầu tiên của một chương trình; thực sự là phần lớn các kịch bản Javascript tôi chắc chắn bắt đầu với các câu lệnh. –

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