2010-01-25 29 views
9

Tôi tương đối mới với Javascript. Tôi hiểu khái niệm về các chức năng ẩn danh - nhưng việc đóng cửa có vẻ ít rõ ràng hơn. Sự giống nhau giữa hai (trong tâm trí của tôi atleast), là khó hiểu.Bất cứ ai có thể giải thích sự khác biệt giữa việc đóng và các chức năng ẩn danh?

Ai đó có thể giải thích sự khác biệt? (tốt hơn, với một số đoạn mã, để minh họa cho các điểm rõ ràng hơn).

+0

Hãy xem ở đây: http://stackoverflow.com/questions/2622421/what-are-the-use -cases-for-closures-callback-functions-in-javascript –

Trả lời

2

tôi đã giải thích ở đây: The Zen of Closures.

Về cơ bản, mà không đi sâu vào chi tiết kỹ thuật:

  • một chức năng ẩn danh là một chức năng mà không có một tên (có thể được gán cho các biến).
  • đóng cửa là một loại biến toàn cầu tin
6

Sự khác biệt quan trọng là một đóng nắm bắt được phạm vi nó được định nghĩa trong.

Nói cách khác, một kết thúc có thể truy cập các biến và tiểu bang của họ thậm chí mặc dù chúng thuộc về phạm vi cha mẹ của đóng (ví dụ như hàm đóng đã được tạo ra). Điều này cho phép đóng cửa để nắm bắt và trạng thái ứng dụng "vận chuyển" xung quanh chương trình của bạn.

Một chức năng ẩn danh không thể thực hiện điều đó; phạm vi tiếp cận của nó được giới hạn cho các biến được xác định bên trong phần thân và chữ ký của nó (tức là các tham số của nó).

CHỈNH SỬA: Chỉ cần làm rõ: Trong JavaScript, điều này đặc biệt không rõ ràng vì không có cấu trúc ngôn ngữ được gọi là đóng. Bạn vẫn sẽ sử dụng một hàm ẩn danh cho điều đó. Tôi chỉ đề cập đến sự khác biệt về khái niệm.

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