Sự khác nhau của let var và const

Phân biệt kiểu biến var, let, và const trong JavaScript

1. Từ khóa var



Bất cứ khi nào một biến được khai báo bằng từ khóa var, các biến đó là:


  • Phạm vi hàm (function scope)hoặc phạm vi toàn cục (global scope)
  • Có thể gán lại (Re-assignable)và có thể khai báo lại (Re-declarable)
  • Không thuộc vùng chết tạm thời (Temporal Dead Zone - TDZ)


1.1. Phạm vi của biến khí sử dụng var



Khi một biến được khai báo trong một hàm bằng cách sử dụng var, thì biến đó sẽ nằm trong phạm vi của hàm.


Tuy nhiên, khi biến được khai báo trong một khốihoặc bên ngoài hàm thì biến toàn cục có phạm vi toàn cục.


Ngoài ra, nó cũng tạo một thuộc tính toàn cục trên đối tượng window. (cùng tên window)




varlanguage="JavaScript";


functionfoo(){

varlanguage="Python";

framework="React";

console.log(language);

}

foo();//"Python"

console.log(language);//"JavaScript"

console.log(window.language);//"JavaScript"

console.log(window.framework);//"React"



Cũng cần lưu ý là các biến được khai báo mà không có bất kỳ câu lệnh nào sẽ trở thành một biến toàn cục theo mặc định.


Nếu bạn muốn tránh hành vi này thì bạn có thể sử dụng chế độ nghiêm ngặt trong JavaScript bằng cách thêm "use strict" ở đầu tệp.



1.2. Gán lại biến và Khai báo lại biến sử dụng từ khóa var



Các biến được khai báo bằng var có thể được gán lại và khai báo lại sau này trong chương trình JS.



varlanguage="JavaScript";

varlanguage="Python";//Khai báo lại biến


console.log(language);//"Python"

language="Java";//Gán lại biến

console.log(language);//"Java"



Nói chung là sử dụng var thì bạn gán lại, khai báo lại thoải mái.


Nhưng có thể bạn sẽ không biết biến nào dùng ở chỗ nào (vì nó không còn duy nhất, giá trị đã có thể đã bị thay đổi ở đâu đó trong mớ hỗn độn kia)


> Vì JavaScript là ngôn ngữ kiểu Dynamic nên rất linh hoạt ở tên, kiểu dữ liệu. Ngược lại các ngôn ngữ kiểu Static như Java thì lại yêu cầu rất chặt chẽ ở phần này. Nếu bạn thích sự chặt chẽ, tham khảo ngay KHÓA HỌC JAVA (full stack), hợp tác với chuyên gia doanh nghiệp đào tạo - tuyển dụng.



1.3. Vấn đề hoisting khi sử dụng từ khóa var



Hoisting trong JavaScript là một cơ chế mà các biếnkhai báo hàm(funcrion declaration) được chuyển lên đầu phạm vi của chúng trước khi thực thi code, thực sự gán giá trị.


Do đó các biến khai báo bằng từ khóa var được đưa lên đầu phạm vi của chúng và được khởi tạo với giá trị undefined.




//Cóthểsửdụngbiếnởtrên

//Nhưngbiếnđóchưađượcgángiátrị

//Nógiữgiátrịmặcđịnh

console.log(myVar);//undefined


//Khaibáobiếnởdưới

varmyVar="NIIT";



Hành vi của nó giống như thế này:



varmyVar;


console.log(myVar);//undefined


//Gángiátrịchobiến

myVar="NIIT";



Tương tự, ở trong một hàm:



functionmyFunc(){

console.log(myVar);


//Khaibáobiến

varmyVar="NIIT";

}


//Thựcthihàm

myFunc();//undefined



Khai báo cũng được kéo lên đầu phạm vi của nó.



functionmyFunc(){


//Khaibáobiến

varmyVar;

console.log(myVar);


//Gángiátrị

myVar="NIIT";


}


//Thựcthihàm

myFunc();//undefined


//BiếnmyVarcóphạmvihàmnên

//khôngthểtruycậpbiếnmyVar

console.log(myVar);//error...



Ở đây chúng ta cũng thấy thêm tác dụng của từ khóa var khiến cho myVar có phạm vi hàm.


Do đó, ta không thể truy cập nó ở bên ngoài hàm được.



Giới thiệu

Javascript 2015 (ES6) ra mắt kèm theo rất nhiều tính năng giúp chúng ta viết code một cách gọn gàng, sạch đẹp hơn, dễ dàng đọc hơn. Một số chức năng tiêu biểu như:let,const,arrow function,promises, ... vv

Trong bài viết này chúng ta sẽ tìm hiểu vềletvàconstphục vụ trong việc khai báo dữ liệu trong JS. Sự khác biệt củalet,constvàvar

Giới Thiệu

ES6 (viết tắt của ECMAScript 6) là một tập hợp các kỹ thuật nâng cao của JavaScript. ECMAScript do hiệp hội các nhà sản xuất máy tính Châu Âu đề xuất làm tiêu chuẩn của ngôn ngữ JavaScript. Bạn cứ nghĩ xem hiện nay có khá nhiều trình duyệt Browser ra đời và nếu mỗi Browser lại có cách chạy JavaScript khác nhau thì các trang web không thể hoạt động trên tất cả các trình duyệt đó được, vì vậy cần có một chuẩn chung để bắt buộc các browser phải phát triển dựa theo chuẩn đó.

Một trong những tính năng nổi bật của ES6 đó là sự bổ sung let const phục vụ cho việc khai báo biến dữ liệu. Vậy tại sao lại cần tới letconst dù trước đó đã có var để khai báo biến, thì ở bài viết này chúng ta sẽ cùng tìm hiểu lý do của từng kiểu khai báo biến. Từ đó bạn có thể biết được khi nào nên dùng var , let const .


Tổng quan

Là một người mới với JS, chắc hẳn nhiều bạn sẽ thấy thật khó hiểu về các từ khóa khai báo biến trong Js. Tại sao một ngôn ngữ khai báo biến không cần kiểu dữ liệu mà có nhiều từ khóa để dùng khai báo biến vậy ?

Video học lập trình mỗi ngày

Var, let, const trong javascript - Những khái niệm đó không xa lại gì nữa kể từ khi ES6 định nghĩa thêm let và const. Nhưng liệu có bạn nào tự hỏi rằng? Chuyện gì xảy ra với var? Và tại sao có var rồi lại sinh ra thêm const và let?


NẾU BẠN LÀ NGƯỜI LƯỜI ĐỌC THÌ ĐÂY LÀ PHIÊN BẢN SO SÁNH GIỮA CONST LET VAR CHO BẠN. ĐỌC NHANH

const let var difference - So sánh nhanh cho những người lười đọc


ES6 rất quan trọng để tìm hiểu bởi vì một lý do là, nó làm cho JavaScript tốt hơn và dễ viết hơn, và Sự khác biệt cấu trúc Class giữa ES5 và ES6. Và hơn nữa ES6 cũng đang được sử dụng cùng với các công nghệ web hiện đại của ngày hôm nay như React, Node.js, v.v. Nhưng trước khi tìm hiểu về let và const thì chúng ta hãy xem var đang có vấn đề gì?

Vậy trong bài viết này, chúng ta sẽ tiếp tục dồng hành cùng nhau để xem chuyện gì xảy ra với var. Để hiểu được var thì trước hết bạn phải hiểu về scope trước. Vì nếu thực sự một developer không hiểu sâu về scope thì dẫn đến làm kết quả sai lệch khi định nghĩa các variable chồng chéo lên nhau, hoặc tệ hơn nữa làm lạm phát những var global. Để thực sự hiểu được về Scope thì tôi khuyên bạn nên đọc qua bài viết này: Vòng đời của một function (The lifecycle of a function)

Nhưng ở đây chúng ta cũng cần lướt qua về khái niệm scope, cho những bạn nào không có thời gian (hay gọi là lười biếng...)
Bạn đã đọc bài viết này chưa: Trời sinh ra for loop sao còn sinh array.forEach trong javascript?

Video học lập trình mỗi ngày

onst, let, var trong javascript. Một bài viết so sánh nhanh nếu bạn nào lười đọc về ý nghĩa sâu xa của những khái niệm đó. Còn nếu muốn tìm hiểu thật sâu để biết rằng vì sao có var rồi, lại thêm const và let nữa thì xin mời theo tôi.

Khuyến khích đọc full: Cái chết của var trong javascript