Tìm hiểu let var const trong Javascript
Trong bài học về biến chúng tôi cũng đã đề cập đến các cách khai báo biến trong javascript như let, var, const vậy thì chúng có điểm nào khác nhau và giống nhau, hoạt động của nó thế nào, khi nào nên sử dụng nó.
Bây giờ chúng ta đi phân biệt biến Var, let, const
Biến Var
Như đã biết trong Vanilla Javascript, với từ khóa var chúng ta có thể khai báo đa dạng các kiểu biến như number, string, boolean, etc. Trừ trường hợp được khai báo bên trong 1 function (khi đó biến var sẽ có scope là function/locally scoped), biến var sẽ có scope là globally scoped. Đặc biệt, biến var còn có thêm tính chất hoisting: nghĩa là dù khai báo ở đâu thì biến đều sẽ được đem lên đầu scope trước khi code được thực hiện.
Chúng ta có thể lấy một ví dụ để các bạn hiểu:
console.log(greeting);
var greeting = 'Hello World';
Như ở vị dụ trên nếu khai báo ở các ngôn ngữ lập trình khác, có thể dẫn đến erro khi thực hiện chạy chương trình, nhưng với javascript thì các bạn có thể yên tâm vấn đề đó vì nó sẽ biện dịch lại như sau.
var greeting = 'Hello World';
console.log(greeting)
Var không có phạm vi khối
Các biến, được khai báo bằng var, có phạm vi chức năng hoặc phạm vi toàn cục. Chúng có thể nhìn thấy qua các khối.
Ví dụ:
if (true) {
var test = true; // use "var" instead of "let"
}
alert(test); // true, the variable lives after if
Biến let
Một trong những nguyên nhân khiến let có thể thay thế var để xử lý vấn đề nêu trên là vì biến let được khai báo sẽ có scope là block scoped chứ không phải globally hay locally scoped.
let greeting = "say Hi";
let times = 4;
if (times > 3) {
let hello = "say Hello instead";
console.log(hello); // "say Hello instead"
}
console.log(hello); // hello is not defined
Giống với var, let cũng có tính hoisting tuy nhiên lại khác nhau ở chỗ thay vì var được khởi tạo với giá trị là undefined thì let sẽ không có bất kỳ giá trị khởi tạo nào. Điều này dẫn đến việc nếu chúng ta sử dụng biến let trước khi khai báo thì sẽ gặp lỗi Reference Error
Biến const
Tương tự với let cũng có scope là block scoped, và hoisting thì chúng ta có thêm 1 kiểu khai báo biến nữa là const. Trong biến const nếu trường hợp kiểu của biến là primitive (bao gồm string, number, boolean, null, và undefined) thì chúng ta sẽ không thể tái khai báo hay cập nhật giá trị mới để thay thế cho giá trị trước đó của biến.
Đối với trường hợp kiểu biến là reference (bao gồm object, array, và function) thì tuy không thể tái khai báo hay cập nhật giá trị của biến nhưng chúng ta vẫn có thể cập nhật giá trị cho thuộc tính của biến đó.
const greeting = {
message : "Hello",
number : "five"
}
greeting.message = "say Hello instead";
console.log(greeting); // {message:"say Hello instead",number:"five"}
Post a Comment
Post a Comment