Khai báo phạm vi toàn cầu và lưu trữ Javascript
Trong javascript, giai đoạn biên dịch tìm và liên kết tất cả các khai báo với các phạm vi thích hợp của chúng.
TRƯỜNG HỢP 1
a = 2;
console.log(a);
Nếu không được sử dụng ở chế độ nghiêm ngặt, đoạn mã được giả định là thực sự được xử lý như sau:
var a;
a = 2;
console.log(a);
Đầu ra: 2
CASE2
nếu khai báo xảy ra bên dưới console.log ()
console.log(a);
var a = 2;
Ở đây tại dòng 1: trình biên dịch sẽ kiểm tra khai báo của một trong phạm vi của nó nếu không được tìm thấy, phạm vi toàn cục sẽ chỉ định một và cùng một mã sẽ được giả định giống như
var a;
console.log(a);
a = 2;
Đầu ra: undefined // vì không có giá trị nào được gán trong khi bảng điều khiển đọc thông dịch viên
CASE3
console.log(a);
a = 2;
Đầu ra: RefErr
Tại sao điều này ném ra lỗi tham chiếu và không phải là không xác định?
Trả lời
Nếu bạn xem xét cẩn thận hai trường hợp đầu tiên của mình, bạn luôn khai báo biến avà trong JavaScript chỉ có các khai báo được lưu trữ.
Điều đó đang được nói, trong của bạn Case 3, biến akhông bao giờ được khai báo, do đó, không thể sử dụng ở đây. Với điều đó, không có biến theo tên atrong phạm vi và do đó ReferenceError,.
Nếu bạn nhìn vào mô tả của ReferenceError , nó có nội dung:
Đối tượng ReferenceError đại diện cho một lỗi khi một biến không tồn tại được tham chiếu.
Các hình cầu ngầm không ngụ ý một vartuyên bố. Không có cẩu của chúng.