Tôi không thể tìm thấy kết hợp chính xác về vấn đề của mình, mặc dù có nhiều câu hỏi về phạm vi javascript tồn tại. Đây là mã hiện tại của tôi cho câu hỏi.Javascript Scoping Confusion
var my_var = "blank";
var MyFunc = function() {
my_var = "one";
//var my_var = "two";
}
alert(my_var);
MyFunc();
alert(my_var);
Khi tôi chạy này, tôi đang thông báo với "blank" và sau đó "một" như mong đợi. Tuy nhiên, nếu tôi uncomment rằng một dòng, do đó, nó trông như thế này.
var my_var = "blank";
var MyFunc = function() {
my_var = "one";
var my_var = "two";
}
alert(my_var);
MyFunc();
alert(my_var);
Tôi cảnh báo với "blank" và sau đó "blank". Đây không phải là những gì tôi mong đợi và tôi thấy nó khó hiểu rằng việc thêm một dòng sẽ loại bỏ hành vi. Bất cứ ai có thể giải thích những gì đang xảy ra ở đây? Tôi thấy hành vi này trong cả firefox và safari.
Tuy nhiên, một lý do chính đáng tại sao bao giờ sử dụng các biến địa phương với tên giống như các biến toàn cục chỉ là chuốc lấy phiền. – jfriend00