2013-10-16 17 views
41

tôi có mã này:Tại sao Jshint lại nói "biến đã được xác định" trong câu lệnh if?

if (something is true) { 
     var someVar = true; 
    } else { 
     var someVar = false; 
    } 

JsHint đang nói rằng "someVar đã được định nghĩa" trên một phần tuyên bố khác. Tại sao điều này và làm thế nào để sửa chữa nó?

Cảm ơn

+0

@thefourtheye với ES6, khối Phạm vi bây giờ tồn tại trong JavaScript sử dụng '{}' và 'let' –

Trả lời

62

JS không có phạm vi khối, họ có "chức năng" phạm vi (hoặc đôi khi toàn cầu).

Tuyên bố (nhưng không phải bài tập) được "treo" lên đầu chức năng.

jshint được cảnh báo với bạn rằng bạn có hai tờ khai như vậy - mã của bạn là tương đương với:

var someVar; 
var someVar; // warning! 
if (something) { 
    someVar = true; 
} else { 
    someVar = false; 
} 
+0

Cảm ơn, rất hữu ích! – user2413333

8

Bạn không nên đặt tờ khai var ở những nơi như vậy. Đặt tờ khai var trước if và sau đó chỉ cần đặt "someVar" thành giá trị.

Thật vậy, ở đây bạn không cần một tuyên bố if tại tất cả:

var someVar = !!(something); 

sẽ làm điều tương tự. (Ứng dụng kép của ! đảm bảo rằng "someVar" được đặt thành true hoặc false, dựa trên "độ trung thực" của something.)

+1

Ah đó là tốt để biết, cảm ơn bạn – user2413333

+7

'var someVar = Boolean (cái gì đó);' làm điều tương tự và có lẽ là dễ đọc hơn. –

18

Điều này là do cẩu.

Trong javascript, không có vấn đề mà bạn định nghĩa một biến mới với var, nó di chuyển nó lên đỉnh của hàm bạn trong mã của bạn được sản xuất sau trên nếu khối của bạn ở phía trên cùng của hàm:.

var someVar; 
var someVar; 

đây là một hướng dẫn để giải thích cẩu: biến

http://net.tutsplus.com/tutorials/javascript-ajax/quick-tip-javascript-hoisting-explained/

+0

Cảm ơn, rất hữu ích! – user2413333

+0

Tôi lưu ý từ ngữ của bạn thay đổi từ "có thể là do" thành "do" cùng lúc khi bạn thêm mã giống như câu trả lời của tôi ... – Alnitak

+1

Không chắc chắn bạn đang ngụ ý điều gì đó, nhưng trong trường hợp bạn đang có, tôi không sao chép câu trả lời của bạn. –

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