Mã bên dưới là mã JavaScript. Tôi đang cố gắng hiểu phạm vi chức năng trong JavaScript và theo dõi bài viết trên here. Tôi đang tạo lại mã bên dưới -Hiểu phạm vi hàm JavaScript
var cow = "purple"; // just a random cow
var f = function (x) {
var r = 0;
cow = "glue";
if (x > 3) {
var cow = 1; // a local variable
r = 7;
}
return r;
};
var z = f(2);
alert(cow); // returns purple
Tôi không hiểu tại sao chuỗi "tím" được cảnh báo. Dòng cow = "glue";
nên đặt giá trị của biến bò thành "keo". Nếu tôi loại bỏ khối nếu, và sau đó cảnh báo bò trong tuyên bố cuối cùng, tôi thấy rằng chuỗi "keo" được cảnh báo.
Khi f (2) được gọi, nếu khối mã không được nhập và không có gì trong đó được thực hiện, vậy tại sao tôi thấy kết quả khác nhau? tức là tại sao con bò cảnh báo trong câu cuối cùng trả lại chuỗi "màu tía" bây giờ?
Thực ra, ngay cả các khối 'catch' cũng có phạm vi riêng (* môi trường biến *). Xem [Tại sao các mệnh đề bắt có môi trường * ngôn ngữ * của riêng mình?] (Http://stackoverflow.com/q/15034864/1048572) để biết chi tiết – Bergi