Trong sách JS Design Patterns của Stefanov, ông viết "bạn sử dụng một câu lệnh var và khai báo nhiều biến được phân tách bằng dấu phẩy", và sau đó đưa ra ví dụ về mẫu "var đơn" như sau:Nhược điểm của Javascript "mẫu var đơn"
function func() {
var a = 1,
b = 2,
sum = a + b,
myobject = {},
i,
j;
Stefanov bổ sung viết:
- "đó là một thực hành tốt cũng để khởi tạo biến với một giá trị ban đầu tại thời điểm bạn khai báo nó."
- "Bạn cũng có thể thực hiện một số công việc thực tế tại thời điểm khai báo, như trường hợp có tổng = a + b trong mã trước."
Bây giờ tôi có một số mã như sau, tuyên bố cùng một số biến với mô hình var duy nhất, nhưng làm nhiều hơn một chút "công việc thực tế tại thời điểm khai báo" khá:
var html = '{purchaseQty}<br>FR: {fromLoc}'
,tpl = new Ext.XTemplate(html)
,srcReqLoc = record.get('SRC_REQUEST_LOC').trim()
,srcSupLoc = record.get('SRC_SUP_LOC').trim()
,fromLoc = srcReqLoc ? srcReqLoc : srcSupLoc
,tplCfg = {
purchaseQty: purchaseQty
,fromLoc: fromLoc
};
Những bất lợi khi làm quá nhiều "công việc thực tế tại thời điểm khai báo" là gì? BTW Tôi không coi đây là một bản sao chính xác của Javascript single var pattern. Am I overloading it? vì tôi hỏi về những nhược điểm chung, thay vì những gì có thể sai với mã của tôi.
Tôi nghĩ rằng tôi có thể thấy rằng bất lợi chung sẽ không có khả năng kiểm tra lỗi, ví dụ trong ví dụ của tôi tôi gọi trim() trên chuỗi được mong đợi từ record.get, nhưng nếu undefined được trả về thay thế, "có thể 't gọi phương pháp trên đối tượng không xác định "(hoặc bất cứ điều gì nó là;) sẽ được ném. Ai có thể nghĩ ra bất cứ điều gì khác không?
Đối với vấn đề với 'trim()', bạn luôn có thể viết hàm cắt của riêng bạn để kiểm tra xem những gì được truyền cho nó có phải là một chuỗi hay không. – slebetman
@slebetman - Bạn không cần hàm: '(record.get ('SRC_SUP_LOC') ||" "). Trim()' (giả sử, theo câu hỏi, '.get()' trả về một chuỗi hoặc không xác định/null). – nnnnnn