Câu trả lời hàng đầu đã lỗi thời. Hiện tại (tháng 8 năm 2012) callee không được dùng ít nhất trong Firefox. Sử dụng callee đã lỗi thời. Hiện nay (tháng 8 năm 2012) callee là "... phản đối bởi ECMA-262." (Xem discussion)
Có hai vấn đề bạn đang chạy vào:
- xử lý chức năng sẽ chỉ được thông qua sự kiện này vật.
- chức năng không được đặt tên, vì vậy bạn không thể đề cập đến nó cho đệ quy
Giải pháp cho 2:
Đây là dễ dàng hơn của cả hai. Thông thường, lý do sử dụng các hàm ẩn danh là giữ một không gian tên sạch sẽ. Dấu ngoặc đơn xác định một không gian tên cục bộ, vì vậy sau khi đặt tên cho hàm, nó sẽ không thể truy cập được bên ngoài dấu ngoặc đơn. Sau đây sẽ làm việc cho bạn:
$('.someclass').onClick(function dosomething(){
... your code ...
dosomething() //again
});
dosomething() // will cause scope error, function not defined
Giải pháp cho 1:
Đây là khó khăn hơn một chút. Vì điều duy nhất được truyền cho hàm là đối tượng sự kiện bạn sẽ cần phải mở rộng để truyền các giá trị. May mắn thay, nó chỉ ra rằng jQuery có một hệ thống just for this!
$('.someclass').on('click', {myvar: 0}, function dosomething(event){
... your code ...
event.data.myvar = event.data.myvar + 1;
dosomething(event) //again
});
Lưu ý: điều này đặc biệt hữu ích khi bạn phải đính kèm và tách trình xử lý để ngăn vòng lặp vô hạn như DOMSubtreeModified.
$('.someclass').on('DOMSubtreeModified.mynamespace', {myvar: 0}, function myfunc(event){
$(this).off('DOMSubtreeModified.mynamespace');
... Some Code that changes .someclass subtree ...
event.data.myvar = event.data.myvar + 1;
$(this).on('DOMSubtreeModified.mynamespace', {myvar: event.data.myvar}, myfunc);
});
Nguồn
2012-08-17 20:21:20
Có thể lấy mẫu hoàn chỉnh không? Tôi chưa thể thực hiện công việc này, tuy nhiên ... – krdluzni
Trang web được liên kết có ví dụ về việc tạo một hàm giai thừa đệ quy ẩn danh. – jimr
agruments.callee không được chấp nhận. xem http://stackoverflow.com/questions/103598/why-was-the-arguments-callee-caller-property-deprecated-in-javascript –