Học Javascript 7: [ES6] Phân biệt var, let và const
Tìm hiểu về sự khác biệt giữa var, let và const trong JavaScript ES6, cách hoạt động của block scope và các quy tắc sử dụng
![Học Javascript 7: [ES6] Phân biệt var, let và const](/_next/image?url=https%3A%2F%2Fres.cloudinary.com%2Fkhoanguyen1505%2Fimage%2Fupload%2Fv1751211000%2Fkhoa_blog%2Fjavascript_es6_var_let_const.jpg&w=1920&q=75)
Block scope là gì?
if (true) {
var text = 'in if statement'
}
console.log(text) // 'in if statement'
Đây có thể gọi là cái ngáo đá nhất khi mới học Javascript, khi nhìn thấy code trong dấu , ta thường nghĩ là sẽ tạo ra scope mới. Nhưng trong Javascript, chỉ có function mới có thể tạo ra Execution Context mới.
If else, vòng lặp, vv đều không thể thay đổi scope của code được. Kiểu như Javascript nó xem như người vô hình vậy. Bạn có thể xài free-standing blocks như dưới đây được luôn:
{
var text = 'in block scope'
console.log(text) // 'in block scope'
}
Vẫn in ra 'in block scope' bình thường.
Khai báo biến với var
Khai báo chồng được luôn:
var text = 'niviki.com'
var text = 'niviki'
console.log(text) // 'niviki'
Mọi người hay nhầm chỗ này:
for (var count = 0; count < 3; count++) {
// code
}
console.log(count) // 3
count = 3 sau khi ra khỏi for
ES6 let và const
Phiên bản ES6 của Javascipt giới thiệu 2 cách khai báo mới là let và const, chúng có những điểm khác biệt sau:
Không khai báo chồng lên như var được
let text = 'niviki.com'
var text = 'niviki' // error
let text = 'niviki' // error
let và const gắn với block scope
for (let count = 0; count < 3; count++) {
// code
}
if (true) {
const email = 'khoa@niviki.com'
}
console.log(count) // count is not defined
console.log(email) // email is not defined
const không thay đổi được giá trị, let thì đổi thoải mái con gà mái:
let text = 'niviki.com'
const email = 'khoa@niviki.com'
text = 'niviki' // OK
email = 'admin@niviki.com' // Uncaught TypeError: Assignment to constant variable.
Cẩn thận với Hoisting
const và let không hoisting như var:
console.log(text)
let text = 'niviki.com'
Kết quả sẽ là: text is not defined
Tại sao?
Nếu bạn theo dõi những bài trước thì có thể giải thích dễ dàng rồi. Vì có global execution context nên biến khai báo với var được tạo trong execution context đó. Còn với biến được khai báo với const và let thì không thể.
Var đã chết? Giờ dùng cái nào?
Nếu bạn search 'should I use var let const in Javascript' sẽ ra một đống bài, anh hùng khắp nơi cùng tranh luận. Mình thấy có một bài giải thích hay về vấn đề này:
-
Mặc định dùng const
-
Không nên dùng var trong ES6
-
Chỉ dùng let nếu thay đổi giá trị của biến.
Theo anh này cũng đúng vì code React Native cũng theo style này
Nói chung tùy phong cách mỗi người, code miễn sao không bug là được
Related Posts
Discover more content you might enjoy

Học Javascript 6: Scope Chain là gì?
Tìm hiểu về Scope Chain trong JavaScript, cách hoạt động của Outer Environment và cách biến được tìm kiếm trong các Execution Context

Học Javascript 5: Execution Stack là gì?
Tìm hiểu về Execution Stack trong JavaScript, cách hoạt động của Execution Context và Variable Environment

English Course Challenge in 2 weeks - Day 12: Kinh nghiệm quay khoá học
Bài viết chia sẻ kinh nghiệm quay khóa học tiếng Anh về Bubble.io, bao gồm việc lựa chọn phần mềm Screen.Studio để quay màn hình và tự động tạo phụ đề, những bài học từ việc đặt mục tiêu và xác định đối tượng học viên trước khi chọn nội dung, cũng như lợi ích của việc thử thách bản thân để vượt qua nỗi sợ và hoàn thành dự định. Tác giả cũng giới thiệu khóa học 'Build your first web app in Bubble for beginners' dành cho người mới bắt đầu.

English Course Challenge in 2 weeks - Day 7: Fine-tuning ChatGPT là gì?
Bài viết chia sẻ tiến trình ngày thứ 7 trong thử thách tạo khóa học tiếng Anh trong 2 tuần. Tác giả giới thiệu về Fine-tuning ChatGPT, một tính năng cho phép tạo phiên bản ChatGPT tùy chỉnh dựa trên dữ liệu cung cấp, đặc biệt hữu ích cho chatbot hỗ trợ khách hàng. Bài viết cũng thảo luận về việc điều chỉnh hướng phát triển ứng dụng demo và khóa học, cùng với những khó khăn khi sử dụng API của OpenAI tại Việt Nam.

By-product
Khám phá khái niệm by-product - những sản phẩm phụ bất ngờ trong cuộc sống. Bài viết chia sẻ cách những hành động đơn giản như viết blog hay đọc sách có thể tạo ra giá trị không ngờ, từ mối quan hệ mới đến thay đổi nhận thức, và cách kết nối những điểm này theo triết lý của Steve Jobs.

Productized Services - Sản phẩm hoá dịch vụ
Bài viết giới thiệu về mô hình kinh doanh Productized Services (sản phẩm hóa dịch vụ), một giải pháp giúp các doanh nghiệp dịch vụ scale up hiệu quả. Tác giả phân tích những hạn chế của các mô hình kinh doanh dịch vụ truyền thống như tư vấn và outsource, so sánh với mô hình SaaS, và giải thích cách chuyển đổi dịch vụ thành package cố định với scope, timeline và giá cả rõ ràng. Bài viết kèm theo các ví dụ thực tế từ nhiều lĩnh vực khác nhau.