Theo yêu cầu của OP, tôi sẽ tham gia (không tự lừa dối bản thân mình, hy vọng: P)
Tôi nghĩ rằng tất cả chúng ta đều đồng ý rằng đệ quy chỉ là một cách mã hóa thanh lịch hơn. Nếu được thực hiện tốt, nó có thể tạo ra mã có thể bảo trì nhiều hơn, đó là IMHO cũng quan trọng (nếu không phải là nhiều hơn) mà cạo đi 0,0001ms.
Theo như lập luận rằng JS không thực hiện tối ưu hóa cuộc gọi đuôi có liên quan: điều đó không hoàn toàn đúng nữa, sử dụng chế độ nghiêm ngặt của ECMA5 cho phép TCO. Đó là điều mà tôi đã không vui khi trở lại, nhưng ít nhất bây giờ tôi biết tại sao lại arguments.callee
ném lỗi trong chế độ nghiêm ngặt. Tôi biết các liên kết ở trên liên kết đến một báo cáo lỗi, nhưng lỗi được đặt thành WONTFIX. Bên cạnh đó, TCO tiêu chuẩn sắp ra mắt: ECMA6 (tháng 12 năm 2013).
Theo bản năng và bám sát bản chất chức năng của JS, tôi muốn nói rằng đệ quy là kiểu mã hóa hiệu quả hơn 99,99% thời gian. Tuy nhiên, Florian Margaine có quan điểm khi nói rằng nút cổ chai có khả năng được tìm thấy ở nơi khác. Nếu bạn đang thao túng DOM, có lẽ bạn tập trung vào việc viết mã của mình càng tốt càng tốt. API DOM là những gì nó là: chậm.
Tôi nghĩ rằng không thể đưa ra một câu trả lời dứt khoát vì đó là lựa chọn nhanh hơn. Gần đây, rất nhiều jspref đã thấy cho thấy rằng động cơ V8 của Chrome có tốc độ nhanh một cách lố bịch ở một số tác vụ, chạy chậm hơn 4 lần trên SpiderMonkey của FF và ngược lại. Các công cụ JS hiện đại có tất cả các loại thủ thuật để tối ưu hóa mã của bạn. Tôi không phải là chuyên gia, nhưng tôi cảm thấy rằng V8, chẳng hạn, được tối ưu hóa cao cho việc đóng (và đệ quy), trong khi công cụ JScript của MS thì không. SpiderMonkey thường hoạt động tốt hơn khi DOM có liên quan ...
Tóm lại: Tôi muốn nói kỹ thuật nào sẽ hiệu quả hơn, như mọi khi trong JS, không thể dự đoán được.