Tại sao JavaScript lưu trữ các biến?
Cơ sở lý luận của các nhà thiết kế khi họ quyết định thực hiện vận thăng là gì? Có ngôn ngữ phổ biến nào khác làm được điều này không?
Vui lòng cung cấp các liên kết liên quan đến tài liệu và / hoặc hồ sơ.
Tại sao JavaScript lưu trữ các biến?
Cơ sở lý luận của các nhà thiết kế khi họ quyết định thực hiện vận thăng là gì? Có ngôn ngữ phổ biến nào khác làm được điều này không?
Vui lòng cung cấp các liên kết liên quan đến tài liệu và / hoặc hồ sơ.
div
trong jQuery
Câu trả lời:
Như Stoyan Stefanov giải thích trong cuốn sách "Các mẫu JavaScript", quá trình lưu trữ là kết quả của việc triển khai trình thông dịch JavaScript.
Việc diễn giải mã JS được thực hiện trong hai lần. Trong lần truyền đầu tiên, trình thông dịch xử lý các khai báo biến và hàm.
Bước thứ hai là bước thực thi mã thực tế. Trình thông dịch xử lý các biểu thức hàm và các biến chưa được khai báo.
Do đó, chúng ta có thể sử dụng khái niệm "cẩu" để mô tả hành vi đó.
"var hoisting do đó [là] hậu quả không mong muốn của chức năng hoisting, không có phạm vi khối, [và] JS là một công việc gấp rút năm 1995."
"function hoisting cho phép phân rã chương trình từ trên xuống, 'let rec' miễn phí, gọi trước khi khai báo; var hoisting được gắn thẻ cùng."
Tôi không biết bất kỳ ngôn ngữ phổ biến nào khác sử dụng các biến theo cách tương tự. Tôi nghĩ rằng ngay cả ActionScript - một triển khai khác của ECMAScript được sử dụng trong phát triển Flash - cũng không triển khai tính năng lưu trữ. Điều này đã gây ra sự nhầm lẫn và thất vọng cho các nhà phát triển quen thuộc với các ngôn ngữ khác đang học JavaScript.
CẬP NHẬT: Từ các nhận xét, Python có hành vi cẩu biến tương tự .
Điều này là do trình thông dịch javascript thông dịch mã trong hai chu kỳ.
Trong chu kỳ đầu tiên, tất cả các khai báo biến và hàm được đưa lên đầu phạm vi hàm mà nó đang thực thi. Điều này giúp tạo variableObjects
cho execution context
hàm ngay cả trước khi nó thực thi.
Trong giai đoạn 2, các phép gán giá trị, câu lệnh mã và lệnh gọi hàm diễn ra từng dòng theo cách thức mong đợi.
Bạn có một chút chi tiết hơn đọc ở đây.
Nó sẽ cung cấp cho bạn một hình ảnh tốt hơn xung quanh xung quanh hành vi let
, const
và class
tờ khai, cũng là ưu tiên nó sau giữa biến và chức năng.