Use Strict là gì? Strict Mode trong javascript - Javascript căn bản
Khi bạn download những file JS trên mạng về hoặc download những Plugin jQuery thì bạn sẽ thấy phía trên cùng của file người ta có đặt dòng chữ "use strict";. Vậy câu hỏi được đặt ra là từ khóa use strict là gì và mục đích người ta đặt nó ở đầu file để làm gì?. Để trả lời câu hỏi trên thì ta phải tìm ...
Khi bạn download những file JS trên mạng về hoặc download những Plugin jQuery thì bạn sẽ thấy phía trên cùng của file người ta có đặt dòng chữ "use strict";
. Vậy câu hỏi được đặt ra là từ khóa use strict là gì và mục đích người ta đặt nó ở đầu file để làm gì?. Để trả lời câu hỏi trên thì ta phải tìm sự thoải mái trong việc phát triển của Javascript và sự ra đời của Strict Mode.
1. Chế độ Strict Mode là gì ?
Khi bạn làm việc với Javascript thì bạn có thể sử dụng biến mà chưa cần định nghĩa (hoisting), bạn có thể quên đặt dấu chấm phẩy ở cuối mỗi đoạn code và bạn có thể sử dụng tên những từ khóa để tạo tên biến. Điều này làm cho các lập trình viên có thói quen làm việc quá dễ dãi và dẫn đến chương trình thiếu tính an toàn. Chính vì vậy Javascript kể từ phiên bản 1.8.5 trở đi đã bổ sung một khái niệm gọi Strict Mode nhằm giải quyết tính thiếu an toàn này.
Và bây giờ câu hỏi đặt ra là làm thế nào để khai báo sử dụng chế độ Strict Mode? Để trả lời câu hỏi này thì ta qua phần tiếp theo.
2. Use Strict là gì ?
Use strict là từ khóa khai báo sử dụng chế độ Strict Mode, nghĩa là nếu bạn muốn sử dụng chế độ Strict Mode ở đâu thì chỉ việc đặt từ khóa "use strict"
ở đó. Chế độ Strict Mode có hai phạm vi sử dụng đó là toàn cục và cục bộ. Tính toàn cục tức là khi bạn đặt từ "use strict"
ở ngoài hàm và nằm phía trên cùng của file thì lúc này tất cả các đoạn code bên dưới đều bị ảnh hưởng. Tính cục bộ tức là bạn đặt "use strict"
nằm trong một hàm nào đó thì phạm vi ảnh hưởng chỉ nằm trong hàm đó mà thôi.
Phạm vi Strict Mode toàn cục
Trong ví dụ này chương trình chạy bị sẽ bị sai vì biến domain
chưa được khởi tạo. Tuy nhiên nếu ta bỏ từ khóa use strict đi thì chương trình sẽ chạy bình thường.
// Phía trên cùng của file "use strict"; // Đoạn code này lỗi vì biến domain chưa được khởi tạo domain = "https://Zaidap.com.net"; // In ra màn hình document.write(domain);
Bây giờ ta thử gom đoạn code trên vào một hàm thử.
// Phía trên cùng của file "use strict"; function show_domain(){ // Đoạn code này lỗi vì biến domain chưa được khởi tạo domain = "https://Zaidap.com.net"; // In ra màn hình document.write(domain); } show_domain();
Chạy lên chương trình vẫn bị lỗi vì ta đã khai báo tính toàn cục cho chế độ Strict Mode.
Phạm vi Strict Mode cục bộ
Sử dụng ví dụ trên nhưng ta sẽ khai báo ở trong phạm vi của hàm.
function show_domain(){ "use strict"; } // Đoạn code này lỗi vì biến domain chưa được khởi tạo domain = "https://Zaidap.com.net"; // In ra màn hình document.write(domain);
Chạy lên chương trình vẫn hoạt động bình thường. Tuy nhiên nếu ta sử dụng sai trong hàm đó thì chương trình sẽ không hoạt động.
function show_domain(){ "use strict"; // Đoạn code này lỗi vì biến domain chưa được khởi tạo domain = "https://Zaidap.com.net"; // In ra màn hình document.write(domain); } show_domain();
3. Ví dụ Use Strict trong Javsacript
Bây giờ mình sẽ liệt kê ra một số trường hợp bị lỗi khi chạy ở chế độ Strict Mode.
Sử dụng biến chưa được định nghĩa: Bạn không thể sử dụng một biến mà chưa được định nghĩa trước đó.
"use strict"; // sai vì biến domain chưa được khởi tạo trừ trước domain = 'Zaidap.com.net';
Không chấp nhận delete biến: Bạn không thể delete các hàm, biến nếu chạy ở chế độ Strict Mode
"use strict"; var domain = 'Zaidap.com.net'; // Sai vì không được delete delete domain;
Định thuộc tính nghĩa hai lần: Nếu trong một Object bạn định nghĩa tên key bị trùng thì sẽ bị lỗi.
"use strict"; // Sai vì key email bị trùng var info = { email : "thehalfheart@gmail.com", email : "Zaidap.com.net@gmail.com" };
Khao báo tham số bị trùng: Nếu bạn khai báo các tham số bị trùng tên thì sẽ bị lỗi
"use strict"; // Sai vì tham số domain bị trùng function show_domain(domain, domain){ // do some thing }
Lỗi literals và escape với number: Bạn không được sử dụng literals và escape với kiểu number.
"use strict"; // Sai var x = 0100; var y = 100;
Khai báo tên biến trùng với key: Bạn không thể khai báo tên của biến trùng với key của Javascript.
// Lỗi: Trùng hàm eval var eval = 12; // Lỗi: từ khóa arguments không được sử dụng làm tên biến var arguments = 12; // Lỗi: Từ khóa delete là khóa nên không được sử dụng làm tên biến var delete = 123;
Ngoài ra bạn không thể sư dụng tên biến với các từ khóa sau:
- implements
- interface
- package
- private
- protected
- public
- static
- yield
4. Lời kết
Qua bài này bạn sẽ không còn thắc mắc use strict là gì nữa phải không nào. Và thông qua từ khóa use strict bạn đã biết thế nào là chế độ chạy Strict Mode và công dụng của nó trong việc lập trình. Vì vậy kể từ bây giờ bạn hãy tập làm quen với chế độ Strict Mode này nhé vì nó chặt chẽ và an toàn, đảm bảo chương trình của bạn có thể chạy trên mọi trình duyệt hiện nay.