2015-07-24 14 views
9

Trên trang 90 của JavaScript Crockford: The Good Parts, ông có mã có sau đây:Phương thức xác thực của Crockford -khi đóng cửa?

String.method('entityify', function(){ 

    var character = { 
    '<': '&lt;', 
    '>': '&gt;', 
    '&': '&amp;', 
    '"': '&quot;' 
    }; 

    return function(){ 
    return this.replace(/[<>&"]/g, function(c){ 
     return character[c]; 
    }); 
    }; 
}()); 

console.log("<&>".entityify()); 

Có một lý do chính đáng cho việc đóng cửa và ngay lập tức gọi chức năng bên ngoài? Sau đây dường như chỉ làm việc cũng như:

String.method('entityify', function(){ 

    var character = { 
    '<': '&lt;', 
    '>': '&gt;', 
    '&': '&amp;', 
    '"': '&quot;' 
    }; 

    return this.replace(/[<>&"]/g, function(c){ 
    return character[c]; 
    }); 
}); 

Trả lời

9

Bằng cách làm nó theo cách ông đã làm, ông đã tạo ra các đối tượng characterlần và tái sử dụng nó. Với chỉnh sửa của bạn, bạn tạo lại nó mỗi lần. Bạn có thể tranh luận theo cách này, nhưng đó là sự khác biệt. Sử dụng của anh ta phân đoạn bộ nhớ khác. Bạn cần phân đoạn ngắn hơn lâu hơn cho mỗi cuộc gọi (có thể, phụ thuộc vào việc tạo đối tượng có mất nhiều thời gian hơn bước truyền tải phạm vi bổ sung mà anh có); Trong mọi trường hợp, nó có khả năng là bất cứ điều gì mà bạn muốn nhận thấy trong thế giới thực.

+0

Với phiên bản của Crockford, tôi có thể nghĩ nó là: vì 'ký tự' được tham chiếu trong một đóng, nó treo trong bộ nhớ và không phải là rác thu thập được, ngay cả khi hàm trả về? Trong khi với phiên bản của tôi, 'ký tự' là-từ quan điểm mã của tôi của xem -wiped từ bộ nhớ mỗi lần' entityify' trả về? –

+1

@mr_c: Có hiệu lực, có. Cụ thể: Hàm (đóng) mà anh ta trả về thông qua 'hàm trả về() {...};' có tham chiếu đến ngữ cảnh thực thi mà nó được tạo ra (ngữ cảnh được tạo bởi lời gọi 'method' để gọi lại). Vì đối tượng hàm tiếp tục tồn tại sau khi cuộc gọi, bối cảnh nó đề cập tiếp tục tồn tại. Ngữ cảnh đó có 'ký tự' trong đó, vì vậy' ký tự' tiếp tục tồn tại (không phải là thu thập rác). Bối cảnh sẽ tồn tại miễn là chức năng đó tồn tại. –

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