Loading Now

Khai Báo Biến Trong Javascript ES6 Có Gì Khác Biệt

Nếu như trong những ngôn ngữ lập trình C, C++, C#, Java cần phải khai báo kiểu dữ liệu của biến, thì Javascript không cần quan tâm đến việc đó, việc khai báo biến chỉ đơn giản như thế này.

Có thể thấy để khai báo biến chỉ cần sử dụng 1 trong 3 từ khóa var, let, const. Kiểu dữ liệu tự động xác định khi chương trình thực thi. Chính vì sự đơn giản như vậy nên phát sinh ra một số vấn đề xoay quanh 3 từ khóa đó.

1. Khai báo lại

Việc khai báo lại một biến trùng tên trong Javascript là có thể nếu sử dụng từ khóa var, nhưng với letconst thì không được.

Nếu khai báo như thế này sẽ lỗi.

2. Hoisting

Hoisting là khái niệm chỉ việc mọi khai báo biến sẽ được đưa lên trên cùng của hàm.

Trong Javascript ES6, khái niệm Hoisting chỉ tồn tại khi khai báo biến với từ khóa var, không tồn tại với letconst.

Khi console.log() một biến chưa được khai báo trước đó thì chương trình sẽ tìm kiếm biến có cùng tên được khai báo với từ khóa var và đưa lên đầu hàm. Tương tự như thế này.

Kết quả in ra sẽ là undefined

Nhưng đối với letconst không có khái niệm Hoisting.

Khi chạy thì chương trình sẽ báo lỗi.

3. Block scope

Block scope có nghĩa là phạm vi hoạt động của một biến trong phạm vi hai dấu {} (if, for)

Đối với từ khóa letconst thì phạm vi hoạt động chỉ tồn tại trong block, chúng ta cùng xem các ví dụ sau.

Kết quả in ra như sau.

Nhưng với constlet thì chỉ tồn tại trong block, ở bên ngoài block thì không tồn tại.

Chương trình sẽ báo lỗi

4. Callback

Khi sử dụng callback trong một vòng lặp, nếu khai báo biến mà không chú ý từ khóa thì sẽ phát sinh vấn đề, chúng ta cùng xét ví dụ sau.

VD: Viết chương trình sau 0.5 giây in ra những số nguyên từ 0 đến 4.

Theo cách nghĩ thông thường thì nhiều người sẽ không quan tâm đến vấn đề từ khóa khi khai báo biến chạy, chỉ quan tâm vấn đề chính là làm sau để sau 0.5 giây in ra những số nguyên từ 0 đến 4.

Kết quả sau khi chạy chương trình

Chương trình không in ra kết quả như ta mong muốn. Giá trị của biến i trong hàm callback lại là giá trị cuối cùng của vòng lặp.

Cách khắc phục vấn đề này là thay thế từ khóa var thành let.

Và kết quả giống như ta mong muốn.

5. Global object

Khi khai báo biến ở global scope, từ khóa var tạo ra thuộc tính mới cho global object, nhưng với letconst thì không.

Kết quả

Tạm kết

Trên đây là những kiến thức của mình với việc khai báo biến trong Javascript. Hi vọng sẽ có ích với các bạn. Đừng ngần ngại để lại ý kiến đóng góp ở phần bình luận để kiến thức được hoàn chỉnh và sâu hơn nữa nhé các bạn. Cảm ơn các bạn.

Post Comment

Contact