Lấy khuôn khổ jQuery ví dụ, nếu bạn chạy mã như thế này:Các hàm được đặt tên có được đánh giá bằng JavaScript không?
$(document).ready(function init() { foo.bar(); });
Các stack trace bạn nhận được trong Firebug sẽ trông như thế này:
init()
anonymous()
anonymous([function(), init(), function(), 4 more...], function(), Object name=args)
anonymous()
anonymous()
Như bạn có thể thấy, nó không phải là rất có thể đọc được, bởi vì bạn phải bấm vào từng chức năng để tìm ra nó là gì. Các hàm ẩn danh cũng sẽ hiển thị là (?)()
trong trình hồ sơ và chúng có thể dẫn đến lỗi "cannot access optimized closure". Dường như với tôi rằng đây là những lý do tốt để tránh chúng. Sau đó, thực tế là ECMAScript 5 sẽ không dùng arguments.callee
ở chế độ nghiêm ngặt, điều này có nghĩa là sẽ không thể tham chiếu các chức năng ẩn danh với nó, làm cho chúng ít tương lai hơn một chút.
Mặt khác, sử dụng tên chức năng có thể dẫn đến sự lặp lại, ví dụ:
var Foo = {
bar: function bar() {}
}
function Foo() {}
Foo.prototype.bar = function bar() {}
Tôi thích hợp trong suy nghĩ rằng sự lặp lại này là hợp lý trong bối cảnh sự tiện lợi gỡ lỗi tên là chức năng cung cấp, và rằng sự phổ biến chức năng ẩn danh trong các khung công tác tốt như jQuery là sự giám sát?
Rất tiếc, liên kết đến bài viết đó không hoạt động nữa. Tuy nhiên cùng một bài viết có thể được tìm thấy ở đây: http://kangax.github.com/nfe/ – Jan