2013-03-10 28 views
5

Lấy hàm Nút không đồng bộ fs.stat() để biết ví dụ. Nếu tôi cần sử dụng fs.stat() trên một tệp, sau đó thực hiện lại sau, kết quả sẽ bị che khuất.Thực tiễn không tốt đối với các biến đổ bóng của một cuộc gọi lại?

fs.stat(file, function(err, stats) { 
    fs.stat(file, function(err, stats) { 
    }); 
}); 

Các err biến, cũng như stats biến được shadowed - Điều này thậm chí còn quan trọng nếu tôi sẽ không được sử dụng callback đầu tiên bên thứ hai? Có thực hành tốt hơn để đổi tên các biến gọi lại thứ hai không?

Không ghi đè các biến này, một lần hoặc nhiều lần có bất kỳ tác động hiệu suất nào không?

Trả lời

6

Vấn đề quan điểm, nhưng tôi muốn nói có - thực hành không tốt. Trong mọi trường hợp, có hai vấn đề ở đây

  • Có thể gây nhầm lẫn cho người tiếp theo (có thể là bạn) cần làm việc với mã này.

  • Tại một thời điểm nào đó trong tương lai, bạn có thể cần truy cập các giá trị bên ngoài để cung cấp một số chức năng mới (ví dụ: muốn đảm bảo hai đối tượng tệp có cùng loại?). Thực hiện thay đổi đó sẽ yêu cầu chỉnh sửa gây phiền toái và dễ bị lỗi của toàn bộ khối mã.

Sử dụng tên khác ngay bây giờ để ngăn sự cố sau này.

0

Có, thực tiễn không tốt. Phụ thuộc vào một nhà phát triển xem nó như thế nào xấu nó có thể nhận được. Nếu tôi có một cái gì đó như thế này, điều đầu tiên để bật lên trong tâm trí của tôi là

Tại sao anh ấy lại chuyển số errstats đến cuộc gọi lại này?

fs.stat(file, function(err, stats) { 
         \\ \\ 
         \\ \\ 
    fs.stat(file, function(err, stats) { 
    }); 
}); 

Khi làm việc trong nhiều trường hợp có chức năng giống như bạn đang làm ngay bây giờ. Bạn phải đảm bảo rằng tất cả các biến có thể được truy cập độc lập.

Trừ khi bạn chắc chắn một biến hoặc cấu trúc không còn được sử dụng nữa, thì bạn có thể sử dụng lại. Nhưng bạn phải đề cập đến điều này trong một nhận xét hữu ích để đảm bảo một nhà phát triển khác hiểu được điều đó.


Cập nhật:

Những biến về chức năng gọi lại có một giới hạn phạm vi, vì vậy họ sẽ không ảnh hưởng bên ngoài khai báo hàm.

Một ví dụ về trường hợp hợp lệ là:

fs.stat(file, function(err, stats) { 

    }); 

    //Another similar functions somewhere with same varialbes 
    fs.stat(file2, function(err, stats) { 
    }); 
+0

@hexacyanide Những biến trong callback có một giới hạn phạm vi. Vì vậy, bên ngoài chúng sẽ không bị ảnh hưởng, vấn đề xảy ra bên trong chúng. – Starx

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