2012-07-10 39 views
23

Trong this post, Nick Craver cung cấp một câu trả lời, trong đó ông sử dụng:Gạch dưới dưới dạng biến JavaScript?

function(_, id) 

Mã này không tuyên bố gạch dưới như là một biến trước khi sử dụng nó. Tìm kiếm của tôi trên google và ở đây chỉ trỏ đến tham chiếu đến việc sử dụng dấu gạch dưới làm tiền tố., Không phải là biến tự. Nó làm gì? Tôi thích giải pháp của Nick nhưng điều đó làm tôi khó chịu.

Trả lời

29

Tôi đã thấy dấu gạch dưới được sử dụng để biểu thị biến đó là biến "không quan tâm". Nó có nghĩa là nó không quan trọng và không được sử dụng ở tất cả.

Trong trường hợp bạn đã chỉ ra, nó được sử dụng để biểu thị rằng chức năng của anh ta có hai đối số, nhưng anh ta chỉ cần một đối số thứ hai.

+0

Cảm ơn bạn Ivan. Nhưng bạn có biết tại sao nó có thể được sử dụng mà không bị tuyên bố? Tôi đánh giá cao bất kỳ tài liệu tham khảo tôi có thể đọc thêm về điều này –

+0

Trong ví dụ bạn cung cấp, '_' đang được khai báo là một đối số trong hàm. Anh ta không sử dụng nó chút nào. – Ivan

+0

Ah! Hiểu rồi. Thanx –

4

Theo kiểu, _ thường được sử dụng làm biến giữ chỗ. Một biến mà sẽ không thực sự được sử dụng trong phạm vi.

13

Gạch dưới là valid JS variable name. Tham số có tên _ trong ví dụ trên có thể được sử dụng như bất kỳ biến nào khác.

Tuy nhiên, nó thường được sử dụng để chỉ người đọc tiếp theo (người) của mã mà bất kỳ thứ gì được chuyển vào sẽ không được sử dụng. (Tác giả của mã có thể là ác/dốt nát và sử dụng nó trong chức năng, mặc dù).

0

Như tất cả các áp phích khác trước đây đã nói, nó có thể được xem như một trình giữ chỗ, trong trường hợp nó không được dự kiến ​​sẽ được sử dụng. Tôi đã thấy một cái gì đó tương tự trong python, khi một hàm có thể trả về nhiều giá trị, nhưng chỉ có những giá trị được yêu cầu mới được xác định rõ ràng.

Ví dụ

a, _, c = foo(bar) 

Trong trường hợp này giá trị trả về tiềm năng của 'b' đang được bỏ qua (mà vẫn có thể được truy cập bởi _), và 'a' và 'c' sẽ được sử dụng .

5

Là người mới bắt đầu, tôi đã không thu thập được nhiều khía cạnh liên kết với câu trả lời này, nằm rải rác trên các nhận xét và các câu trả lời khác. Vì vậy, tôi sẽ cố gắng để củng cố họ dưới đây:

Thứ nhất, ở dạng mảnh nêu mã, lập luận gạch được sử dụng như sau: -

$(this).val('').attr('id', function(_, id) { return id + i }); 

Từ các tài liệu jQuery cho attr chức năng here, có một dạng quá tải là attr.attr(attributeName, function). Các function theo hình thức này được mô tả như

Type: Chức năng (index Integer, String attr)

Do đó, nó hy vọng hai tham số. Tuy nhiên, trong mã của chúng tôi, chúng tôi chỉ cần id, đây là thông số thứ hai.

Bây giờ, vì cách JS xử lý đối số chức năng, chúng tôi không thể viết nó như function(id), như JS sẽ lập bản đồ id-index (đối số đầu tiên dự kiến ​​cho function). Do đó, hàm chúng ta viết cần có hai tham số.

Ở đây, một quy ước tiêu chuẩn được phát hành. Như đã đề cập here,

Ký tự gạch dưới (_) được sử dụng như một cách tiêu chuẩn để biểu thị đối số hàm không sử dụng.

Tuy nhiên, đây chỉ là quy ước chứ không phải quy tắc. Chúng tôi cũng có thể đặt tên cho đối số không được sử dụng là index hoặc unused. Tức là,

$(this).val('').attr('id', function(unused, id) { return id + i }); 

sẽ là tương đương hợp lệ.

Do đó, việc sử dụng _ để thay thế cho đối số không được sử dụng có thể được sử dụng cho bất kỳ hàm jQuery nào khác có dạng ghi đè tương tự. Ví dụ: trong câu trả lời this, chúng tôi có thể thấy việc sử dụng dấu gạch dưới trong cuộc gọi đến $.text(). Chỉ cần xác nhận, $.text() có biểu mẫu ghi đè chấp nhận hàm có hai đối số, như được hiển thị here.

-1

Mặc dù tất cả các câu trả lời đều giải thích rằng đây là kiểu mã "hack" để chỉ ra tham số không sử dụng thường là một thực hành không tốt (ý tưởng). Nó sẽ ghi đè bất kỳ biến nào _ được khai báo trong phạm vi cấp độ gốc. Điều này sẽ ngăn bạn sử dụng các thư viện xác định _ (ví dụ như underscorejs). Nó thậm chí không phải là một số loại tối ưu hóa vì nó tuyên bố một biến anyways.

Bạn nên sử dụng tên mô tả của thông số và xem xét _ giống như một biến thông thường. Rút ngắn tên biến cũng được coi là thực hành không tốt. Vì vậy, nếu bạn có kế hoạch sử dụng "thông minh hack", xin vui lòng không.

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