Nâng cao trong Javascript === Biên dịch?


9

Tôi bắt gặp một viễn cảnh thú vị tại một cuộc phỏng vấn việc làm gần đây.

Tời trong Javascript là về việc di chuyển các khai báo biến và khai báo hàm ở đầu tập lệnh. Chúng ta có thể gọi giai đoạn này là biên dịch ?

Tôi biết về thực tế là trình thông dịch Javascript có 2 lần chuyển qua tập lệnh đầu vào trong đó ở lần đầu tiên nó thực hiện và lần thứ hai nó thực sự thực thi tập lệnh. Khi biết rằng Javascript là một ngôn ngữ được giải thích, câu hỏi này khiến tôi hơi bối rối.

Câu trả lời:


18

Không. Nâng hàng không phải là tổng hợp.

Tời là một khái niệm được tạo ra bởi các nhà phát triển để giải thích những gì xảy ra trong quá trình biên dịch khi các biến và khai báo hàm được di chuyển lên trên cùng của phạm vi chứa của chúng.

Quá trình biên dịch là những gì xảy ra khi mã Javascript của bạn được chuyển thành một số đại diện khác (thường là một số loại mã thực thi), sẽ được thực thi ngay bây giờ hoặc sau này. Công cụ Javascript Javascript của Chrome thực sự có hai trình biên dịch; một để tạo mã thực thi nhanh và bẩn ngay bây giờ, còn lại để tạo mã tối ưu hóa sau này.

Ngôn ngữ lập trình không được định nghĩa là ngôn ngữ "biên dịch" hoặc "diễn giải". Thay vào đó, các ngôn ngữ được giải thích hoặc biên dịch khi cần thiết.

Đọc thêm
Tời trong Javascript
Cách thức hoạt động của động cơ V8


1
Bài viết trên wikipedia về các ngôn ngữ được dịch cũng hữu ích trong phân biệt "được giải thích" so với "được biên dịch": en.wikipedia.org/wiki/Interprave_lingu

Nếu tôi hiểu điều này một cách chính xác, Ho hiện không chuyển đổi tập lệnh thành mã có thể đọc được bằng máy, vì vậy nó không phải là trình biên dịch . Tôi có đúng không :)
Rahul Desai

Đọc đoạn thứ hai của câu trả lời của tôi một lần nữa.
Robert Harvey

1
Trong cuộc trò chuyện gần đây của tôi với người phỏng vấn về chủ đề này, anh ấy đã cho tôi tham khảo khóa học Advanced JS trên FrontendMasters.com nơi Kyle Simpson giải thích rằng đó là phần tổng hợp, theo nghĩa là nếu chúng ta so sánh nó với kịch bản Bash, chẳng hạn, nó sẽ không biết những gì sẽ xảy ra ở dòng số 4 trong khi nó ở dòng số 3. Tuy nhiên, trong trường hợp trình biên dịch JS, nó đã thấy những gì trên dòng số 4 trước đó trong quá trình nâng hàng. Nó chỉ là nó không được chuyển đổi thành mã nhị phân không giống như các ngôn ngữ khác. Javascript được biên dịch mỗi khi nó được chạy.
Rahul Desai
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.