Definition

Strict mode là một chế độ giúp chúng ta code JavaScript trở nên an toàn hơn.

Xét ví dụ sau:

fullName = "Kwan"
 
function func() {
  age = 20
}
 
console.log(fullName) // "Kwan"
console.log(age) // 20

Có thể thấy, hai biến nameage không hề sử dụng từ khóa khai báo biến. Điều này vô tình làm cho biến age đáng lẽ phải có block scope lại trở thành window scope (tham khảo JS Scopes).

Dẫu vậy, chương trình lại không thông báo lỗi, và ta có thể dễ dàng bỏ qua vấn đề này trong khi code. Để nhận biết lỗi, ta cần sử dụng strict mode.

Usage

Các cách sử dụng strict mode:

  • Thêm 'use strict' vào đầu file Javascript.
  • Thêm 'use strict' vào đầu thẻ <script>.
  • Thêm 'use strict' vào đầu phạm vi hàm.

Strict mode chỉ áp dụng tính từ dòng 'use-strict' trở đi.

Properties

Khi sử dụng strict mode, có các tính chất sau:

  • Không thể khai báo biến mà không có từ khóa var, let hoặc const. Ví dụ:

    "use strict"
     
    fullName = "Kwan" // Uncaught ReferenceError: fullName is not defined
     
    function func() {
      age = 20 // Uncaught ReferenceError: age is not defined
    }
  • Báo lỗi khi reassign cho biến không thể reassign, khi xóa thuộc tính không thể xóa.

  • Báo lỗi khi hàm có tham số trùng tên.

    "use strict"
     
    // Duplicate parameter name not allowed in this context
    function sum(a, a) {
      return a + a
    }
  • Khai báo hàm trong code block thì hàm đó sẽ có block scope.

    "use strict"
     
    {
      function sum(a, b) {
        return a + b
      }
    }
     
    console.log(sum(1, 2)) // Uncaught ReferenceError: sum is not defined
  • Ngăn không cho đặt tên biến hoặc tên hàm bằng từ khóa của ngôn ngữ mà có khả năng được thêm vào trong tương lai (chẳng hạn protected hay private).