Tôi đang nghiên cứu THREE.js và nhận thấy một mẫu trong đó các hàm được định nghĩa như vậy:
var foo = ( function () {
var bar = new Bar();
return function ( ) {
//actual logic using bar from above.
//return result;
};
}());
(Ví dụ xem phương pháp raycast tại đây ).
Các bình thường biến thể của một phương pháp như vậy sẽ giống như thế này:
var foo = function () {
var bar = new Bar();
//actual logic.
//return result;
};
So sánh phiên bản đầu tiên với biến thể bình thường , phiên bản đầu tiên dường như khác ở điểm:
- Nó chỉ định kết quả của một chức năng tự thực thi.
- Nó định nghĩa một biến cục bộ trong hàm này.
- Nó trả về hàm thực có chứa logic sử dụng biến cục bộ.
Vì vậy, sự khác biệt chính là trong biến thể đầu tiên, thanh chỉ được gán một lần khi khởi tạo, trong khi biến thể thứ hai tạo biến tạm thời này mỗi khi nó được gọi.
Dự đoán tốt nhất của tôi về lý do tại sao điều này được sử dụng là nó giới hạn số lượng phiên bản cho thanh (sẽ chỉ có một) và do đó tiết kiệm chi phí quản lý bộ nhớ.
Những câu hỏi của tôi:
- Giả thiết này có đúng không?
- Có tên cho mẫu này không?
- Tại sao cái này được sử dụng?