Code Tu Tam

Phạm vi biến trong Javascript

Rate this post

Khái niệm

Trong Javascript bao gồm 2 loại biến là biến toàn cục và biến cục bộ.

 let ten = "Trần Thái";
 console.log(ten);
 function demo() {
    console.log("Xin Chào " + ten);
 }
 demo();

// Kết quả
Trần Thái
Xin Chào Trần Thái
 function demo() {
    let ten = "Trần Thái";
    console.log("Xin Chào " + ten);
 }
 demo();
 console.log(ten);

// Kết quả 
Xin Chào Trần Thái
Uncaught ReferenceError: ten is not defined

Các kiểu biến trong Javascript

Có 3 cách để khai báo biến trong Javascript là: let, const và var.

Var

Trước bản ES6 chúng ta thường dùng var để khai báo cho 1 biến, nhưng ở var có một vấn đề là nó bao gồm một tính chất hoisting – dù bạn có khai báo biến ở đâu thì nó đều sẽ bị đem lên đầu scope trước khi code thực hiện.

Ví dụ:

var demo = "Chào bạn";
var times = 4;

if (times > 3) {
    var demo = "Chào lần nữa nha!"; 
}

console.log(demo); 

// Kết quả
Chào lần nữa nha!

Việc bao gồm tính chất này của var dẫn đến việc mà chúng ta sẽ không biết việc biến của chúng ta bị thay đổi ở đâu và sẽ dẫn đến khó khăn trong việc debug nếu xảy ra lỗi.

Let, const

Để xử lý vấn đề trên thì ở ES6 đã bổ sung thêm 2 kiểu biến là let và const.

Let

Let có thể thay thế cho var là bởi vì nó chỉ là một phạm vi block chứ không phải là toàn cục như var. Nó giống như biến cục bộ, bạn chỉ có thể lấy được giá trị của nó ở trong hàm hoặc trong dấu { }, còn nếu ra ngoài thị sẽ không truy cập được nữa.

Ví dụ:

let demo = "Chào bạn";
let times = 4;

if (times > 3) {
     let hello = "Chào lần nữa nha!";
     console.log(hello); 
 }
console.log(hello); 

// Kết quả
Chào lần nữa nha!
hello is not defined

Ở let có một đặc điểm nữa là bạn trong cùng 1 block bạn không thể khai báo 2 tên biến giống nhau

let demo = "Chào bạn";
console.log(demo); 

demo = "Chào bạn lần nữa nha!";
console.log(demo);

// Kết quả
Chào bạn
error: Identifier 'demo' has already been declared

Nhưng bạn có thể khai báo tên biến giống nhau ở từng block khác nhau.

let demo = "Chào bạn";
if (true) {
    let demo = "Chào bạn lần nữa nha!";
    console.log(demo); 
}
console.log(demo);

// Kết quả
Chào bạn lần nữa nha!
Chào bạn

Const

Tương tự như let, const cũng là biến có phạm vi là block. Trong trường hợp biến chúng ta bao gồm các kiểu string, number, boolean, null và undefined thì sẽ không thể khai báo tên biến giống nhau hay update giá trị mới cho biến.

Ví dụ:

const demo = "Chào bạn";
demo = "Chào bạn lần nữa nha!"; 

// Kết quả
error : Assignment to constant variable. 

------------------------------------------------

const demo = "Chào bạn";
const demo = "Chào bạn lần nữa nha!"; 

// Kết quả
error : Identifier 'demo ' has already been declared

Tuy nhiến nếu biến của bạn là kiểu object, array hay function thì bạn có thể update giá trị cho thuộc tính của nó

const demo = {
    message : "Chào bạn",
    number : "five"
}

demo.message = "Chào bạn lần nữa nha!";
console.log(demo);

// Kết quả
{message: "Chào bạn lần nữa nha!', number: 'five'}

Hy vọng bài viết giúp bạn hiểu rõ hơn về phạm vi của biến. Nếu cảm thấy bài viết có ích hãy chia sẻ để mọi người cùng biết nha!

 

 

 

 

 

 

Exit mobile version