- vừa được xem lúc

Phạm vi biến cực dị của Javascript

0 0 8

Người đăng: Hoài Long

Theo Viblo Asia

Thuở ban đầu:

Ban đầu lúc được thiết kế thì Javascript chỉ có 2 phạm vi duy nhất là phạm vị toàn cục (global scope) và phạm vi địa phương (local scope).

Global scope:

Các biến có phạm vi toàn cục sẽ có thể truy xuất ở bất kì đâu.

Ví dụ đơn giản:

var a = 10; function doSomething(){ console.log(a); // có thể truy cập a
} function doAnotherThing(){ console.log(a); // có thể truy cập a } doSomething();
doAnotherThing();

Local scope:

Các biến chỉ tồn tại bên trong các hàm (function), local scope còn được gọi là function scope vì lẽ này. Mỗi hàm có phạm vi cục bộ riêng của nó, do đó một hàm không thể truy cập các biến cục bộ của một hàm khác.

Ví dụ:

function doSomething(){ var a = 10;
} function doAnotherThing(){ console.log(a); // không thể có thể truy cập biến A. Lỗi: ReferenceError: a is not defined
} doAnotherThing();

Từ năm 2015 trở đi với ES6:

ES6 bổ sung thêm từ khóa let cho javascript. Các biến khai báo với từ khóa let sẽ có phạm vị khối (block scope).

Phạm vị khối (block scope) là một biến được khai báo trong 1 khối lệnh nào đó, ví dụ: câu lệnh điều kiện (if) hoặc vòng lặp (for). Thực sự thì phạm vi khối không có gì lạ đối với các ngôn ngữ hướng đối tượng như Java, C#, tuy nhiên đối với Javascript thì hơi “dị”. ?

OK, bàn tí về sự khác nhau của varlet.

var và let:

Ta xem ví dụ bên dưới:

if(true){ let a = 10; var b = 20;
}
//Có thể truy cập b nhưng không thể truy cập a console.log(b); // in ra 10
console.log(a); // Lỗi: a is not defined

Trong ví dụ trên, biến a khai báo với let sẽ có phạm vị khối lệnh. Do đó, bên ngoài khối lệnh if thì không thể truy xuất được. Trong khi đó, biến b khai báo bằng từ khóa var sẽ có phạm vị hàm, đo đó, vẫn có thể truy xuất bên ngoài khối lệnh if.

const:

Ta mở rộng vấn đề với việc bàn thêm về từ khóa const.

Cái này cực kì dễ hiểu, tương tư như các ngôn ngữ lập trình khác thì const dùng để khai báo hằng số. Một biến khi khai báo là const, nếu bị gán vào giá trị mới thì sẽ bị lỗi là TypeError: Assignment to constant variable.

const x = 1;
x = 100; // Lỗi Uncaught TypeError: Assignment to constant variable

Khi nào nên dùng var hoặc let hoặc const?

Theo kinh nghiệm của cái nhân mình thì: ưu tiên dùng const. Kế đến là dùng let và cố gắng không dùng var. Quá đơn giản phải không nào. ?

Kết:

Qua bài này bạn đã hiểu thêm về 3 phạm vi biến trong Javascript là: global, local và block. Ngoài ra, quan trọng nhất là biết khi nào nên dùng let, var và const: “Ưu tiên dùng const. Kế đến là dùng let và cố gắng không dùng var”.

Bình luận

Bài viết tương tự

- vừa được xem lúc

Giới thiệu Typescript - Sự khác nhau giữa Typescript và Javascript

Typescript là gì. TypeScript là một ngôn ngữ giúp cung cấp quy mô lớn hơn so với JavaScript.

0 0 528

- vừa được xem lúc

Bạn đã biết các tips này khi làm việc với chuỗi trong JavaScript chưa ?

Hi xin chào các bạn, tiếp tục chuỗi chủ đề về cái thằng JavaScript này, hôm nay mình sẽ giới thiệu cho các bạn một số thủ thuật hay ho khi làm việc với chuỗi trong JavaScript có thể bạn đã hoặc chưa từng dùng. Cụ thể như nào thì hãy cùng mình tìm hiểu trong bài viết này nhé (go).

0 0 436

- vừa được xem lúc

Một số phương thức với object trong Javascript

Trong Javascript có hỗ trợ các loại dữ liệu cơ bản là giống với hầu hết những ngôn ngữ lập trình khác. Bài viết này mình sẽ giới thiệu về Object và một số phương thức thường dùng với nó.

0 0 158

- vừa được xem lúc

Tìm hiểu về thư viện axios

Giới thiệu. Axios là gì? Axios là một thư viện HTTP Client dựa trên Promise.

0 0 149

- vừa được xem lúc

Imports và Exports trong JavaScript ES6

. Giới thiệu. ES6 cung cấp cho chúng ta import (nhập), export (xuất) các functions, biến từ module này sang module khác và sử dụng nó trong các file khác.

0 0 113

- vừa được xem lúc

Bài toán đọc số thành chữ (phần 2) - Hoàn chỉnh chương trình dưới 100 dòng code

Tiếp tục bài viết còn dang dở ở phần trước Phân tích bài toán đọc số thành chữ (phần 1) - Phân tích đề và những mảnh ghép đầu tiên. Bạn nào chưa đọc thì có thể xem ở link trên trước nhé.

0 0 249