tra-loi-cau-hoi-phat-trien-web.com

"Sử dụng nghiêm ngặt" làm gì trong JavaScript và lý do đằng sau nó là gì?

Gần đây, tôi đã chạy một số mã JavaScript của mình thông qua JSLint , và nó đã báo lỗi sau:

Vấn đề ở dòng 1 ký tự 1: Thiếu câu lệnh "sử dụng nghiêm ngặt".

Thực hiện một số tìm kiếm, tôi nhận ra rằng một số người thêm "use strict"; vào mã JavaScript của họ. Khi tôi thêm câu lệnh, lỗi dừng xuất hiện. Thật không may, Google đã không tiết lộ nhiều lịch sử đằng sau tuyên bố chuỗi này. Chắc chắn nó phải có một cái gì đó để làm với cách JavaScript được trình duyệt diễn giải, nhưng tôi không biết hiệu ứng sẽ như thế nào.

Vậy "use strict"; là gì, nó ngụ ý gì, và nó có còn phù hợp không?

Có bất kỳ trình duyệt hiện tại nào phản hồi chuỗi "use strict"; không hoặc nó có được sử dụng trong tương lai không?

7004
Mark Rogers

Bài viết này về Chế độ nghiêm ngặt Javascript có thể khiến bạn quan tâm: John Resig - ECMAScript 5 Chế độ nghiêm ngặt, JSON và hơn thế nữa

Để trích dẫn một số phần thú vị:

Chế độ nghiêm ngặt là một tính năng mới trong ECMAScript 5 cho phép bạn đặt một chương trình hoặc một chức năng trong bối cảnh hoạt động "nghiêm ngặt". Bối cảnh nghiêm ngặt này ngăn chặn một số hành động nhất định được thực hiện và ném thêm ngoại lệ.

Và:

Chế độ nghiêm ngặt giúp một vài cách:

  • Nó bắt một số blooper mã hóa phổ biến, ném ngoại lệ.
  • Nó ngăn chặn hoặc ném lỗi, khi các hành động tương đối "không an toàn" được thực hiện (chẳng hạn như giành quyền truy cập vào đối tượng toàn cầu).
  • Nó vô hiệu hóa các tính năng gây nhầm lẫn hoặc suy nghĩ kém.

Cũng lưu ý rằng bạn có thể áp dụng "chế độ nghiêm ngặt" cho toàn bộ tệp ... Hoặc bạn chỉ có thể sử dụng nó cho một chức năng cụ thể (vẫn trích dẫn từ bài viết của John Resig):

// Non-strict code...

(function(){
  "use strict";

  // Define your library strictly...
})();

// Non-strict code... 

Điều này có thể hữu ích nếu bạn phải trộn mã cũ và mã mới ;-)

Vì vậy, tôi cho rằng nó hơi giống với "use strict" mà bạn có thể sử dụng trong Perl (vì vậy tên?): Nó giúp bạn ít mắc lỗi hơn, bằng cách phát hiện thêm nhiều thứ có thể dẫn đến vỡ.

Hiện tại, nó được hỗ trợ bởi tất cả các trình duyệt chính(thanh IE 9 trở xuống).

4608
Pascal MARTIN

Đây là một tính năng mới của ECMAScript 5. John Resig đã viết lên một bản tóm tắt hay của nó.

Đây chỉ là một chuỗi bạn đặt trong các tệp JavaScript của mình (ở đầu tệp hoặc bên trong hàm) trông giống như sau:

"use strict";

Đặt mã vào mã của bạn bây giờ không nên gây ra bất kỳ vấn đề nào với các trình duyệt hiện tại vì đây chỉ là một chuỗi. Nó có thể gây ra vấn đề với mã của bạn trong tương lai nếu mã của bạn vi phạm pragma. Chẳng hạn, nếu bạn hiện có foo = "bar" mà không xác định foo trước, mã của bạn sẽ bắt đầu thất bại ... đó là một điều tốt theo quan điểm của tôi.

1157
seth

Câu lệnh "use strict"; hướng dẫn trình duyệt sử dụng chế độ Nghiêm, đây là một bộ tính năng JavaScript giảm và an toàn hơn. 

Danh sách các tính năng (không đầy đủ)

  1. Không cho phép các biến toàn cầu. (Bắt thiếu var khai báo và lỗi chính tả trong tên biến) 

  2. Bài tập không thành công sẽ khiến lỗi ở chế độ nghiêm ngặt (gán NaN = 5;

  3. Nỗ lực xóa các thuộc tính không thể xóa được sẽ ném (delete Object.prototype

  4. Yêu cầu tất cả các tên thuộc tính trong một đối tượng bằng chữ là duy nhất (var x = {x1: "1", x1: "2"}

  5. Tên tham số chức năng phải là duy nhất (function sum (x, x) {...}

  6. Cấm cú pháp bát phân (var x = 023; một số nhà phát triển giả định rằng số 0 đứng trước không có gì thay đổi số.) 

  7. Cấm từ khóa with 

  8. eval trong chế độ nghiêm ngặt không giới thiệu các biến mới 

  9. Cấm xóa tên đơn giản (delete x;)

  10. Cấm ràng buộc hoặc gán tên evalarguments dưới mọi hình thức 

  11. Chế độ nghiêm ngặt không bí danh các thuộc tính của đối tượng arguments với các tham số chính thức. (tức là trong function sum (a,b) { return arguments[0] + b;} Điều này hoạt động vì arguments[0] bị ràng buộc với a, v.v.)

  12. arguments.callee không được hỗ trợ

[Tham khảo: Chế độ nghiêm ngặt , Mạng nhà phát triển Mozilla]

575
gprasant

Nếu mọi người lo lắng về việc sử dụng use strict, có thể đáng để kiểm tra bài viết này: 

ECMAScript 5 'Chế độ nghiêm ngặt' trong các trình duyệt. Điều đó có nghĩa là gì?
NovoGeek.com - Nhật ký web của Krishna

Nó nói về hỗ trợ trình duyệt, nhưng quan trọng hơn là làm thế nào để đối phó với nó một cách an toàn:

function isStrictMode(){
    return !this;
} 
/*
   returns false, since 'this' refers to global object and 
   '!this' becomes false
*/

function isStrictMode(){   
    "use strict";
    return !this;
} 
/* 
   returns true, since in strict mode the keyword 'this'
   does not refer to global object, unlike traditional JS. 
   So here, 'this' is 'undefined' and '!this' becomes true.
*/
386
Jamie Hutber

Một lời cảnh báo, tất cả các lập trình viên khó tính của bạn: áp dụng "use strict" cho mã hiện tại có thể nguy hiểm! Điều này không phải là một nhãn dán vui vẻ, vui vẻ mà bạn có thể tát vào mã để làm cho nó 'tốt hơn'. Với pragma "use strict", trình duyệt sẽ đột nhiên BỎ ngoại lệ ở những nơi ngẫu nhiên mà nó chưa bao giờ ném trước đó chỉ vì tại thời điểm đó bạn đang làm một cái gì đó mặc định/lỏng JavaScript vui vẻ cho phép nhưng những tác giả JavaScript nghiêm ngặt! Bạn có thể có các vi phạm nghiêm ngặt ẩn trong các cuộc gọi hiếm khi được sử dụng trong mã của bạn, điều này sẽ chỉ đưa ra một ngoại lệ khi cuối cùng chúng được chạy - giả sử, trong môi trường sản xuất mà khách hàng trả tiền của bạn sử dụng!

Nếu bạn chuẩn bị đi sâu, thì nên áp dụng "use strict" bên cạnh các bài kiểm tra đơn vị toàn diện và tác vụ xây dựng JSHint được cấu hình nghiêm ngặt sẽ giúp bạn tự tin rằng không có góc tối nào trong mô-đun của bạn sẽ nổ tung khủng khiếp chỉ vì bạn đã bật Chế độ nghiêm ngặt. Hoặc, này, đây là một tùy chọn khác: chỉ cần không thêm "use strict" vào bất kỳ mã kế thừa nào của bạn, có thể an toàn hơn theo cách đó, thành thật mà nói. DEFINITELY KHÔNG thêm "use strict" vào bất kỳ mô-đun nào bạn không sở hữu hoặc duy trì, như các mô-đun của bên thứ ba.

Tôi nghĩ mặc dù nó là một con vật bị nhốt chết người, "use strict" có thể là thứ tốt, nhưng bạn phải làm điều đó đúng. Thời gian tốt nhất để đi nghiêm ngặt là khi dự án của bạn là greenfield và bạn đang bắt đầu lại từ đầu. Định cấu hình JSHint/JSLint với tất cả các cảnh báo và tùy chọn được điều chỉnh chặt chẽ như nhóm của bạn có thể theo dõi, có được một hệ thống xây dựng/kiểm tra/khẳng định tốt được xử lý như Grunt+Karma+Chai và chỉ THEN bắt đầu đánh dấu tất cả các mô-đun mới của bạn là "use strict". Hãy chuẩn bị để chữa rất nhiều lỗi và cảnh báo. Đảm bảo mọi người hiểu được lực hấp dẫn bằng cách định cấu hình bản dựng thành FAIL nếu JSHint/JSLint tạo ra bất kỳ vi phạm nào.

Dự án của tôi không phải là dự án greenfield khi tôi chấp nhận "use strict". Do đó, IDE của tôi có đầy các dấu đỏ vì tôi không có "use strict" trên một nửa các mô-đun của mình và JSHint phàn nàn về điều đó. Đó là một lời nhắc nhở cho tôi về việc tái cấu trúc tôi nên làm gì trong tương lai. Mục tiêu của tôi là được đánh dấu đỏ miễn phí do tất cả các câu lệnh "use strict" bị thiếu của tôi, nhưng đó là cách đây nhiều năm.

194
DWoldrich

Sử dụng _'use strict';_ không đột nhiên làm cho mã của bạn tốt hơn.

Chế độ nghiêm ngặt của JavaScript là một tính năng trong ECMAScript 5 . Bạn có thể kích hoạt chế độ nghiêm ngặt bằng cách khai báo điều này ở đầu tập lệnh/hàm của bạn.

_'use strict';
_

Khi một công cụ JavaScript nhìn thấy điều này directive , nó sẽ bắt đầu diễn giải mã theo chế độ đặc biệt. Trong chế độ này, các lỗi được đưa ra khi các hoạt động mã hóa nhất định có thể là lỗi tiềm ẩn được phát hiện (đó là lý do đằng sau chế độ nghiêm ngặt).

Xem xét ví dụ này:

_var a = 365;
var b = 030;
_

Trong nỗi ám ảnh của họ để sắp xếp các chữ số, nhà phát triển đã vô tình khởi tạo biến b với một chữ bát phân. Chế độ không nghiêm ngặt sẽ diễn giải điều này dưới dạng chữ số có giá trị _24_ (trong cơ sở 10). Tuy nhiên, chế độ nghiêm ngặt sẽ ném một lỗi.

Để biết danh sách đặc sản không đầy đủ trong chế độ nghiêm ngặt, xem câu trả lời này .


Tôi nên sử dụng _'use strict';_ ở đâu?

  • Trong my new Ứng dụng JavaScript: Hoàn toàn! Chế độ nghiêm ngặt có thể được sử dụng như một người thổi còi khi bạn đang làm điều gì đó ngu ngốc với mã của mình.

  • Trong my hiện tại Mã JavaScript: Có thể là không! Nếu mã JavaScript hiện tại của bạn có các câu lệnh bị cấm ở chế độ nghiêm ngặt, ứng dụng sẽ chỉ bị hỏng. Nếu bạn muốn chế độ nghiêm ngặt, bạn nên chuẩn bị để gỡ lỗi và sửa mã hiện có của mình. Đây là lý do tại sao sử dụng _'use strict';_ không đột nhiên làm cho mã của bạn tốt hơn .


Làm cách nào để sử dụng chế độ nghiêm ngặt?

  1. Chèn câu lệnh _'use strict';_ trên đầu tập lệnh của bạn:

    _// File: myscript.js
    
    'use strict';
    var a = 2;
    ....
    _

    Lưu ý rằng mọi thứ trong tệp _myscript.js_ sẽ được diễn giải ở chế độ nghiêm ngặt.

  2. Hoặc, chèn một câu lệnh _'use strict';_ trên đầu thân hàm của bạn:

    _function doSomething() {
        'use strict';
        ...
    }
    _

    Mọi thứ trong phạm vi từ vựng của hàm doSomething sẽ được diễn giải trong chế độ nghiêm ngặt. Word phạm vi từ vựng rất quan trọng ở đây. Xem câu trả lời này để được giải thích rõ hơn.


Điều gì bị cấm trong chế độ nghiêm ngặt?

Tôi tìm thấy một Bài viết hay mô tả một số điều bị cấm trong chế độ nghiêm ngặt (lưu ý rằng đây không phải là danh sách độc quyền):

Phạm vi

Trong lịch sử, JavaScript đã bị nhầm lẫn về cách các chức năng được phân chia. Đôi khi chúng dường như có phạm vi tĩnh, nhưng một số tính năng làm cho chúng hoạt động giống như chúng có phạm vi động. Điều này là khó hiểu, làm cho các chương trình khó đọc và hiểu. Hiểu lầm gây ra lỗi. Nó cũng là một vấn đề cho hiệu suất. Phạm vi tĩnh sẽ cho phép liên kết biến xảy ra tại thời điểm biên dịch, nhưng yêu cầu đối với phạm vi động có nghĩa là ràng buộc phải được hoãn lại trong thời gian chạy, đi kèm với một hình phạt hiệu suất đáng kể.

Chế độ nghiêm ngặt yêu cầu tất cả các ràng buộc biến được thực hiện tĩnh. Điều đó có nghĩa là các tính năng yêu cầu ràng buộc động trước đây phải được loại bỏ hoặc sửa đổi. Cụ thể, câu lệnh with bị loại bỏ và chức năng eval có khả năng can thiệp vào môi trường của người gọi nó bị hạn chế nghiêm trọng.

Một trong những lợi ích của mã nghiêm ngặt là các công cụ như YUI Compressor có thể thực hiện công việc tốt hơn khi xử lý nó.

Biến toàn cầu

JavaScript đã ngụ ý các biến toàn cầu. Nếu bạn không khai báo rõ ràng một biến, một biến toàn cục sẽ được khai báo ngầm cho bạn. Điều này làm cho việc lập trình dễ dàng hơn cho người mới bắt đầu vì họ có thể bỏ qua một số công việc Nhà vệ sinh cơ bản. Nhưng nó làm cho việc quản lý các chương trình lớn trở nên khó khăn hơn nhiều và nó làm giảm đáng kể độ tin cậy. Vì vậy, trong chế độ nghiêm ngặt, các biến toàn cục ngụ ý không còn được tạo. Bạn nên khai báo rõ ràng tất cả các biến của bạn.

Rò rỉ toàn cầu

Có một số tình huống có thể khiến this bị ràng buộc với đối tượng toàn cầu. Ví dụ: nếu bạn quên cung cấp tiền tố new khi gọi hàm xây dựng, this của hàm tạo sẽ bị ràng buộc bất ngờ với đối tượng toàn cầu, vì vậy thay vì khởi tạo một đối tượng mới, thay vào đó, nó sẽ âm thầm giả mạo các biến toàn cục. Trong những tình huống này, chế độ nghiêm ngặt thay vào đó sẽ liên kết this với undefined, điều này sẽ khiến cho nhà xây dựng ném một ngoại lệ thay vào đó, cho phép phát hiện lỗi sớm hơn nhiều.

Thất bại ồn ào

JavaScript luôn có các thuộc tính chỉ đọc, nhưng bạn không thể tự tạo chúng cho đến khi hàm ES5 từ _Object.createProperty_ thể hiện khả năng đó. Nếu bạn đã cố gán giá trị cho thuộc tính chỉ đọc, nó sẽ thất bại trong âm thầm. Việc chuyển nhượng sẽ không thay đổi giá trị thuộc tính, nhưng chương trình của bạn sẽ tiếp tục như thể nó có. Đây là một mối nguy toàn vẹn có thể khiến các chương trình đi vào trạng thái không nhất quán. Trong chế độ nghiêm ngặt, cố gắng thay đổi thuộc tính chỉ đọc sẽ đưa ra một ngoại lệ.

Octal

Biểu diễn số bát phân (hoặc cơ sở 8) cực kỳ hữu ích khi thực hiện lập trình cấp máy trên các máy có kích thước Word là bội số của 3. Bạn cần bát phân khi làm việc với máy tính lớn CDC 6600, có kích thước Word là 60 bit. Nếu bạn có thể đọc bát phân, bạn có thể xem Word là 20 chữ số. Hai chữ số đại diện cho mã op và một chữ số xác định một trong 8 thanh ghi. Trong quá trình chuyển đổi chậm chạp từ mã máy sang ngôn ngữ cấp cao, việc cung cấp các dạng bát phân trong ngôn ngữ lập trình được cho là hữu ích.

Trong C, một đại diện cực kỳ đáng tiếc của bát phân đã được chọn: Dẫn đầu số không. Vì vậy, trong C, _0100_ có nghĩa là 64, không phải 100 và _08_ là một lỗi, không phải 8. Thậm chí, rất tiếc, lỗi thời này đã được sao chép sang gần như tất cả các ngôn ngữ hiện đại, bao gồm cả JavaScript, trong đó chỉ có JavaScript Được sử dụng để tạo ra lỗi. Nó không có mục đích nào khác. Vì vậy, trong chế độ nghiêm ngặt, các hình thức bát phân không còn được phép.

Vân vân

Mảng giả đối số trở nên giống mảng hơn một chút trong ES5. Trong chế độ nghiêm ngặt, nó mất các thuộc tính calleecaller. Điều này giúp bạn có thể chuyển arguments của mình sang mã không tin cậy mà không từ bỏ nhiều bối cảnh bí mật. Ngoài ra, thuộc tính arguments của các hàm bị loại bỏ.

Trong chế độ nghiêm ngặt, các khóa trùng lặp trong một hàm bằng chữ sẽ tạo ra lỗi cú pháp. Một hàm có thể có hai tham số có cùng tên. Một hàm có thể có một biến có cùng tên với một trong các tham số của nó. Một hàm có thể ĐÁNH delete các biến của chính nó. Một nỗ lực để delete một thuộc tính không thể định cấu hình hiện ném một ngoại lệ. Giá trị nguyên thủy không được bao bọc ngầm.


Các từ dành riêng cho các phiên bản JavaScript trong tương lai

ECMAScript 5 thêm một danh sách các từ dành riêng. Nếu bạn sử dụng chúng làm biến hoặc đối số, chế độ nghiêm ngặt sẽ đưa ra lỗi. Các từ dành riêng là:

implements, interface, let, package, private, protected, public, staticyield


Đọc thêm

152
sampathsris

Tôi thực sự khuyên mọi nhà phát triển nên bắt đầu sử dụng chế độ nghiêm ngặt ngay bây giờ. Có đủ các trình duyệt hỗ trợ nó rằng chế độ nghiêm ngặt sẽ giúp chúng tôi tránh khỏi những lỗi mà chúng tôi đã biết ngay cả trong mã của bạn.

Rõ ràng, ở giai đoạn ban đầu sẽ có những lỗi chúng ta chưa từng gặp phải trước đây. Để có được lợi ích đầy đủ, chúng tôi cần thực hiện kiểm tra thích hợp sau khi chuyển sang chế độ nghiêm ngặt để đảm bảo rằng chúng tôi đã nắm bắt được mọi thứ. Chắc chắn chúng tôi không chỉ cần ném use strict vào mã của mình và cho rằng không có lỗi. Vì vậy, vấn đề là thời gian bắt đầu sử dụng tính năng ngôn ngữ cực kỳ hữu ích này để viết mã tốt hơn.

Ví dụ,

var person = {
    name : 'xyz',
    position : 'abc',
    fullname : function () {  "use strict"; return this.name; }
};

JSLint là một trình gỡ lỗi được viết bởi Douglas Crockford. Chỉ cần dán vào tập lệnh của bạn và nó sẽ nhanh chóng quét tìm mọi vấn đề và lỗi đáng chú ý trong mã của bạn.

128
Pank

Tôi muốn đưa ra một câu trả lời có phần sáng suốt hơn bổ sung cho các câu trả lời khác. Tôi đã hy vọng chỉnh sửa câu trả lời phổ biến nhất, nhưng không thành công. Tôi đã cố gắng làm cho nó toàn diện và đầy đủ nhất có thể.

Bạn có thể tham khảo tài liệu MDN để biết thêm thông tin.

"use strict" một chỉ thị được giới thiệu trong ECMAScript 5.

Chỉ thị tương tự như tuyên bố, nhưng khác nhau.

  • use strict không chứa các từ khóa: Lệnh này là một câu lệnh biểu thức đơn giản, bao gồm một chuỗi ký tự đặc biệt (trong dấu ngoặc đơn hoặc dấu ngoặc kép). Các công cụ JavaScript, không triển khai ECMAScript 5, chỉ xem một tuyên bố biểu thức mà không có tác dụng phụ. Dự kiến ​​các phiên bản tương lai của tiêu chuẩn ECMAScript sẽ giới thiệu use như một từ khóa thực sự; các trích dẫn do đó sẽ trở nên lỗi thời.
  • use strict chỉ có thể được sử dụng ở đầu tập lệnh hoặc của hàm, tức là nó phải đi trước mọi câu lệnh (thực) khác. Nó không phải là hướng dẫn đầu tiên trong tập lệnh hàm: nó có thể được đi trước bởi các biểu thức câu lệnh khác bao gồm các chuỗi ký tự (và việc triển khai JavaScript có thể coi chúng là các chỉ thị cụ thể thực hiện). Các câu lệnh chuỗi ký tự, theo sau một câu lệnh thực đầu tiên (trong một tập lệnh hoặc hàm) là các câu lệnh biểu thức đơn giản. Thông dịch viên không được giải thích chúng là chỉ thị và chúng không có hiệu lực.

Lệnh use strict chỉ ra rằng đoạn mã sau (trong tập lệnh hoặc hàm) là mã nghiêm ngặt. Mã ở mức cao nhất của tập lệnh (mã không nằm trong hàm) được coi là mã nghiêm ngặt khi tập lệnh chứa lệnh use strict. Nội dung của hàm được coi là mã nghiêm ngặt khi chính hàm được xác định trong mã nghiêm ngặt hoặc khi hàm chứa lệnh use strict. Mã được truyền cho phương thức eval() được coi là mã nghiêm ngặt khi eval() được gọi từ một mã nghiêm ngặt hoặc chứa chính lệnh use strict.

Chế độ nghiêm ngặt của ECMAScript 5 là một tập hợp con bị hạn chế của ngôn ngữ JavaScript, giúp loại bỏ các thiếu sót có liên quan của ngôn ngữ và có tính năng kiểm tra lỗi nghiêm ngặt hơn và bảo mật cao hơn. Sau đây liệt kê sự khác biệt giữa chế độ nghiêm ngặt và chế độ bình thường (trong đó ba chế độ đầu tiên đặc biệt quan trọng):

  • Bạn không thể sử dụng câu lệnh with- trong chế độ nghiêm ngặt.
  • Trong chế độ nghiêm ngặt, tất cả các biến phải được khai báo: nếu bạn gán giá trị cho mã định danh chưa được khai báo là biến, hàm, tham số hàm, tham số mệnh đề bắt hoặc thuộc tính của Object toàn cầu, thì bạn sẽ nhận được ReferenceError. Trong chế độ bình thường, mã định danh được khai báo ngầm định là biến toàn cục (như một thuộc tính của toàn cầu Object)
  • Trong chế độ nghiêm ngặt, từ khóa this có giá trị undefined trong các hàm được gọi dưới dạng hàm (không phải là phương thức). (Ở chế độ bình thường this luôn trỏ đến toàn cầu Object). Sự khác biệt này có thể được sử dụng để kiểm tra nếu việc triển khai hỗ trợ chế độ nghiêm ngặt:
var hasStrictMode = (function() { "use strict"; return this===undefined }());
  • Ngoài ra, khi một hàm được gọi với call() hoặc apply ở chế độ nghiêm ngặt, thì this chính xác là giá trị của đối số đầu tiên của call()or apply(). (Trong chế độ bình thường nullundefined được thay thế bằng Object toàn cầu và các giá trị không phải là đối tượng, được truyền vào các đối tượng.)

  • Trong chế độ nghiêm ngặt, bạn sẽ nhận được TypeError, khi bạn cố gắng gán cho các thuộc tính chỉ đọc hoặc để xác định các thuộc tính mới cho một đối tượng không thể mở rộng. (Ở chế độ bình thường, cả hai đều thất bại mà không có thông báo lỗi.)

  • Trong chế độ nghiêm ngặt, khi chuyển mã tới eval(), bạn không thể khai báo hoặc xác định các biến hoặc hàm trong phạm vi của người gọi (như bạn có thể thực hiện trong chế độ bình thường). Thay vào đó, một phạm vi mới được tạo cho eval() và các biến và hàm nằm trong phạm vi đó. Phạm vi đó bị hủy sau khi eval() kết thúc thực thi.
  • Trong chế độ nghiêm ngặt, đối tượng-đối tượng của hàm chứa một bản sao tĩnh của các giá trị, được truyền cho hàm đó. Trong chế độ bình thường, đối số đối tượng có hành vi hơi "kỳ diệu": Các phần tử của mảng và các tham số hàm được đặt tên tham chiếu cả hai giá trị giống nhau.
  • Trong chế độ nghiêm ngặt, bạn sẽ nhận được SyntaxError khi toán tử delete được theo sau bởi một định danh không đủ điều kiện (tham số biến, hàm hoặc hàm). Trong chế độ bình thường, biểu thức delete sẽ không làm gì và được ước tính thành false.
  • Trong chế độ nghiêm ngặt, bạn sẽ nhận được TypeError khi bạn cố xóa một thuộc tính không thể định cấu hình. (Trong chế độ bình thường, nỗ lực đơn giản là thất bại và biểu thức delete được ước tính thành false).
  • Trong chế độ nghiêm ngặt, nó được coi là một lỗi cú pháp khi bạn cố gắng xác định một số thuộc tính có cùng tên cho một đối tượng bằng chữ. (Ở chế độ bình thường không có lỗi.)
  • Trong chế độ nghiêm ngặt, nó được coi là lỗi cú pháp khi khai báo hàm có nhiều tham số có cùng tên. (Ở chế độ bình thường không có lỗi.)
  • Trong chế độ nghiêm ngặt, các chữ bát phân không được phép (đây là các chữ bắt đầu bằng 0x. (Ở chế độ bình thường, một số triển khai cho phép các chữ bát phân.)
  • Trong chế độ nghiêm ngặt, các định danh evalarguments được coi như từ khóa. Bạn không thể thay đổi giá trị của chúng, không thể gán giá trị cho chúng và bạn không thể sử dụng chúng làm tên cho các biến, hàm, tham số hàm hoặc mã định danh của khối bắt.
  • Trong chế độ nghiêm ngặt có nhiều hạn chế hơn đối với khả năng kiểm tra ngăn xếp cuộc gọi. arguments.callerarguments.callee gây ra TypeError trong một chức năng ở chế độ nghiêm ngặt. Hơn nữa, một số thuộc tính của người gọi và đối số của các hàm trong chế độ nghiêm ngặt sẽ gây ra TypeError khi bạn cố đọc chúng.
92
Ely

Hai xu của tôi:

Một trong những mục tiêu của chế độ nghiêm ngặt là cho phép gỡ lỗi nhanh hơn các vấn đề. Nó giúp các nhà phát triển bằng cách ném ngoại lệ khi một số điều sai xảy ra có thể gây ra hành vi im lặng & lạ cho trang web của bạn. Thời điểm chúng tôi sử dụng use strict, mã sẽ đưa ra các lỗi giúp nhà phát triển sửa lỗi trước.

Vài điều quan trọng mà tôi đã học được sau khi sử dụng use strict:

Ngăn chặn Tuyên bố biến toàn cầu:

var tree1Data = { name: 'Banana Tree',age: 100,leafCount: 100000};

function Tree(typeOfTree) {
    var age;
    var leafCount;

    age = typeOfTree.age;
    leafCount = typeOfTree.leafCount;
    nameoftree = typeOfTree.name;
};

var tree1 = new Tree(tree1Data);
console.log(window);

Bây giờ, mã này tạo nameoftree trong phạm vi toàn cầu có thể được truy cập bằng cách sử dụng window.nameoftree. Khi chúng tôi triển khai use strict, mã sẽ bị lỗi.

Uncaught ReferenceError: nameoftree không được xác định

Sample

Loại bỏ câu lệnh with:

Các câu lệnh with không thể được thu nhỏ bằng các công cụ như glify-js . Họ cũng không dùng nữa và bị xóa khỏi các phiên bản JavaScript trong tương lai.

Sample

Ngăn chặn trùng lặp:

Khi chúng ta có tài sản trùng lặp, nó sẽ ném một ngoại lệ

Uncaught SyntaxError: Sao chép thuộc tính dữ liệu trong đối tượng bằng chữ không được phép trong chế độ nghiêm ngặt

"use strict";
var tree1Data = {
    name: 'Banana Tree',
    age: 100,
    leafCount: 100000,
    name:'Banana Tree'
};

Có ít hơn nhưng tôi cần có thêm kiến ​​thức về điều đó.

80
Shubh

Nếu bạn sử dụng một trình duyệt được phát hành vào năm ngoái hoặc lâu hơn thì rất có thể nó hỗ trợ chế độ Nghiêm JavaScript. Chỉ các trình duyệt cũ hơn trước khi ECMAScript 5 trở thành tiêu chuẩn hiện tại không hỗ trợ nó. 

Các trích dẫn xung quanh lệnh đảm bảo rằng mã vẫn sẽ hoạt động trong các trình duyệt cũ hơn (mặc dù những điều tạo ra lỗi cú pháp ở chế độ nghiêm ngặt thường sẽ khiến tập lệnh gặp trục trặc trong một số trình duyệt cũ hơn).

57
Stephen

Khi thêm "use strict";, các trường hợp sau sẽ ném một SyntaxError trước khi tập lệnh được thực thi:

  • Mở đường cho các phiên bản ECMAScript trong tương lai , sử dụng một trong những từ khóa mới được bảo lưu (trước đây là ECMAScript 6 ): implements, interface , let, package, private, protected, public, staticyield.

  • Hàm khai báo trong khối

    if(a<b){ function f(){} }
    
  • Cú pháp bát phân

    var n = 023;
    
  • this trỏ đến đối tượng toàn cầu.

     function f() {
          "use strict";
          this.a = 1;
     };
     f(); 
    
  • Khai báo hai lần cùng tên cho một tên thuộc tính theo nghĩa đen

     {a: 1, b: 3, a: 7} 
    

    Đây không còn là trường hợp trong ECMAScript 6 ( bug 1041128 ).

  • Khai báo hai đối số hàm có cùng tên hàm

    f(a, b, b){}
    
  • Đặt giá trị cho biến không được khai báo

    function f(x){
       "use strict";
       var a = 12;
       b = a + x*35; // error!
    }
    f();
    
  • Sử dụng delete trên tên biến delete myVariable;

  • Sử dụng eval hoặc arguments làm tên đối số biến hoặc hàm

    "use strict";
    arguments++;
    var obj = { set p(arguments) { } };
    try { } catch (arguments) { }
    function arguments() { } 
    

Nguồn:

56
zangw

Chế độ nghiêm ngặt thực hiện một số thay đổi đối với ngữ nghĩa JavaScript thông thường:

  • loại bỏ một số lỗi im lặng của JavaScript bằng cách thay đổi chúngto throw lỗi.

  • sửa các lỗi gây khó khăn cho JavaScript engine để thực hiện tối ưu hóa.

  • nghiêm cấm một số cú pháp có thể được xác định trong tương lai các phiên bản của ECMAScript.

để biết thêm thông tin vistit Chế độ nghiêm ngặt - Javascript

50
Renganathan M G

"Sử dụng nghiêm ngặt"; là một bảo hiểm mà lập trình viên sẽ không sử dụng các thuộc tính lỏng lẻo hoặc xấu của JavaScript. Đó là một hướng dẫn, giống như một người cai trị sẽ giúp bạn thực hiện các đường thẳng. "Sử dụng nghiêm ngặt" sẽ giúp bạn thực hiện "Mã hóa thẳng".

Những người không thích sử dụng thước kẻ để thực hiện các dòng của họ thường kết thúc trong các trang đó yêu cầu người khác gỡ lỗi mã của họ.

Tin tôi đi. Chi phí không đáng kể so với mã được thiết kế kém. Doug Crockford, người đã là nhà phát triển JavaScript cao cấp trong nhiều năm, có một bài đăng rất thú vị ở đây . Cá nhân, tôi muốn quay lại trang web của anh ấy mọi lúc để đảm bảo rằng tôi không quên thực hành tốt.

Thực hành JavaScript hiện đại phải luôn gợi lên "Sử dụng nghiêm ngặt"; pragma. Lý do duy nhất mà Nhóm ECMA đưa ra chế độ "Nghiêm" là tùy chọn là cho phép các lập trình viên ít kinh nghiệm truy cập vào JavaScript và sau đó cho thời gian thích nghi với thực hành mã hóa mới và an toàn hơn.

49
user2436758

Bao gồm use strict vào đầu tất cả các tệp JavaScript nhạy cảm của bạn từ thời điểm này là một cách nhỏ để trở thành một lập trình viên JavaScript tốt hơn và tránh các biến ngẫu nhiên trở thành toàn cầu và mọi thứ thay đổi âm thầm.

44
Placeholder

Trích dẫn từ w3schools :

Chỉ thị "sử dụng nghiêm ngặt"

Lệnh "sử dụng nghiêm ngặt" là mới trong JavaScript 1.8.5 (ECMAScript Phiên bản 5).

Nó không phải là một tuyên bố, mà là một biểu thức nghĩa đen, bị bỏ qua trước đó các phiên bản của JavaScript.

Mục đích của "sử dụng nghiêm ngặt" là để chỉ ra rằng mã phải là thực hiện trong "chế độ nghiêm ngặt".

Với chế độ nghiêm ngặt, ví dụ, bạn không thể sử dụng các biến không được khai báo.

Tại sao chế độ nghiêm ngặt?

Chế độ nghiêm ngặt giúp viết JavaScript "an toàn" dễ dàng hơn.

Thay đổi chế độ nghiêm ngặt trước đây đã chấp nhận "cú pháp xấu" thành lỗi thực.

Ví dụ, trong JavaScript thông thường, việc nhập sai tên biến sẽ tạo ra một biến toàn cầu mới. Trong chế độ nghiêm ngặt, điều này sẽ gây ra lỗi, làm cho nó không thể vô tình tạo ra một biến toàn cầu.

Trong JavaScript thông thường, nhà phát triển sẽ không nhận được bất kỳ phản hồi lỗi nào gán giá trị cho các thuộc tính không thể ghi.

Trong chế độ nghiêm ngặt, mọi chuyển nhượng cho một tài sản không thể ghi, a tài sản chỉ getter, một tài sản không tồn tại, không tồn tại biến, hoặc một đối tượng không tồn tại, sẽ đưa ra một lỗi.

Vui lòng tham khảo http://www.w3schools.com/js/js_strict.asp để biết thêm

36
Mehul Singh

"use strict" làm cho mã JavaScript chạy trong chế độ nghiêm ngặt, về cơ bản có nghĩa là mọi thứ cần được xác định trước khi sử dụng. Lý do chính cho việc sử dụng chế độ nghiêm ngặt là để tránh việc sử dụng toàn cầu các phương thức không xác định.

Ngoài ra trong chế độ nghiêm ngặt, mọi thứ chạy nhanh hơn, một số cảnh báo hoặc cảnh báo im lặng ném các lỗi nghiêm trọng, tốt hơn là luôn luôn sử dụng nó để tạo mã gọn gàng hơn.

"use strict" được sử dụng rộng rãi trong ECMA5, trong ECMA6, nó là một phần của JavaScript theo mặc định, vì vậy không cần thêm vào nếu bạn đang sử dụng ES6.

Nhìn vào các tuyên bố và ví dụ từ MDN:

Chỉ thị "sử dụng nghiêm ngặt"
Lệnh "sử dụng nghiêm ngặt" là mới trong JavaScript 1.8.5 (Phiên bản ECMAScript 5). Nó không phải là một tuyên bố, mà là một biểu thức bằng chữ, bị bỏ qua bởi các phiên bản trước của JavaScript. Các Mục đích của "sử dụng nghiêm ngặt" là để chỉ ra rằng mã phải là thực hiện trong "chế độ nghiêm ngặt". Với chế độ nghiêm ngặt, bạn không thể, ví dụ, sử dụng các biến không được khai báo.

Ví dụ về sử dụng "sử dụng nghiêm ngặt":
Chế độ nghiêm ngặt cho các chức năng: Tương tự như vậy, để gọi chế độ nghiêm ngặt cho chức năng, đặt tuyên bố chính xác "sử dụng nghiêm ngặt"; (hoặc 'sử dụng nghiêm ngặt';) trong cơ thể của chức năng trước bất kỳ tuyên bố khác.

1) chế độ nghiêm ngặt trong các chức năng 

 function strict() {
     // Function-level strict mode syntax
     'use strict';
     function nested() { return 'And so am I!'; }
     return "Hi!  I'm a strict mode function!  " + nested();
 }
 function notStrict() { return "I'm not strict."; }

 console.log(strict(), notStrict());

2) chế độ nghiêm ngặt toàn tập lệnh 

'use strict';
var v = "Hi! I'm a strict mode script!";
console.log(v);

3) Chuyển nhượng cho toàn cầu không thể ghi

'use strict';

// Assignment to a non-writable global
var undefined = 5; // throws a TypeError
var Infinity = 5; // throws a TypeError

// Assignment to a non-writable property
var obj1 = {};
Object.defineProperty(obj1, 'x', { value: 42, writable: false });
obj1.x = 9; // throws a TypeError

// Assignment to a getter-only property
var obj2 = { get x() { return 17; } };
obj2.x = 5; // throws a TypeError

// Assignment to a new property on a non-extensible object.
var fixed = {};
Object.preventExtensions(fixed);
fixed.newProp = 'ohai'; // throws a TypeError

Bạn có thể đọc thêm về MDN .

32
Alireza

Có một cuộc nói chuyện tốt của một số người trong ủy ban ECMAScript: Thay đổi đối với JavaScript, Phần 1: ECMAScript 5 " về cách sử dụng công tắc "use strict" tăng dần cho phép người triển khai JavaScript dọn sạch rất nhiều tính năng nguy hiểm của JavaScript mà không đột nhiên phá vỡ mọi trang web trên thế giới.

Tất nhiên, nó cũng nói về việc rất nhiều trong số những điều không phù hợp đó là (và) và cách ECMAScript 5 sửa chúng.

29
FutureNerd

Lưu ý rằng use strict đã được giới thiệu trong EcmaScript 5 và được giữ từ đó.

Dưới đây là các điều kiện để kích hoạt chế độ nghiêm ngặt trong ES6ES7 :

  • Mã toàn cầu là mã chế độ nghiêm ngặt nếu nó bắt đầu bằng Lời mở đầu chỉ thị có chứa Chỉ thị nghiêm ngặt sử dụng (xem 14.1.1).
  • Mã mô-đun luôn là mã chế độ nghiêm ngặt.
  • Tất cả các phần của ClassDeclaration hoặc ClassExpression đều là mã chế độ nghiêm ngặt.
  • Mã Eval là mã chế độ nghiêm ngặt nếu nó bắt đầu bằng Chỉ thị Chỉ thị có chứa Chỉ thị nghiêm ngặt sử dụng hoặc nếu lệnh gọi tới eval là một eval trực tiếp (xem 12.3.4.1) được chứa trong mã chế độ nghiêm ngặt.
  • Mã chức năng là mã chế độ nghiêm ngặt nếu liên kết FunctionDeclaration, FunctionExpression, GeneratorDeclaration, GeneratorExpression, MethodDefDef hoặc ArrowFunction được chứa trong mã chế độ nghiêm ngặt hoặc nếu mã tạo ra giá trị của khe cắm bên trong [[ECMAScriptCode] với Lời mở đầu Chỉ thị có Chỉ thị Nghiêm ngặt Sử dụng.
  • Mã chức năng được cung cấp làm đối số cho các hàm tạo Hàm và Trình tạo tích hợp là mã chế độ nghiêm ngặt nếu đối số cuối cùng là Chuỗi mà khi được xử lý là FunctionBody bắt đầu bằng Chỉ thị Chỉ thị có chứa Chỉ thị Nghiêm sử dụng .
18
Oriol

Ví dụ nhỏ để so sánh:

Chế độ không nghiêm ngặt:

for (i of [1,2,3]) console.log(i)
    
// output:
// 1
// 2
// 3

Chế độ nghiêm ngặt:

'use strict';
for (i of [1,2,3]) console.log(i)

// output:
// Uncaught ReferenceError: i is not defined

Chế độ không nghiêm ngặt:

String.prototype.test = function () {
  console.log(typeof this === 'string');
};

'a'.test();

// output
// false

String.prototype.test = function () {
  'use strict';
  
  console.log(typeof this === 'string');
};

'a'.test();

// output
// true

16
Foo

Các lý do chính tại sao các nhà phát triển nên sử dụng "use strict" là:

  1. Ngăn chặn khai báo ngẫu nhiên các biến toàn cục. Sử dụng "use strict()" sẽ đảm bảo rằng các biến được khai báo với var trước khi sử dụng. Ví dụ:

    function useStrictDemo(){
     'use strict';
     //works fine
     var a = 'No Problem';
    
     //does not work fine and throws error
     k = "problem"
    
     //even this will throw error
     someObject = {'problem': 'lot of problem'};
    }
    
  2. N.B: Lệnh "use strict" chỉ được nhận ra khi bắt đầu tập lệnh hoặc hàm.
  3. Chuỗi "arguments" không thể được sử dụng làm biến:

    "use strict";
    var arguments = 3.14;    // This will cause an error
    
  4. Sẽ hạn chế sử dụng từ khóa làm biến. Cố gắng sử dụng chúng sẽ ném lỗi.

Nói tóm lại sẽ làm cho mã của bạn ít bị lỗi hơn và đến lượt nó sẽ khiến bạn viết mã tốt.

Để đọc thêm về nó, bạn có thể tham khảo tại đây .

11
Pritam Banerjee

"Sử dụng nghiêm ngặt"; là nỗ lực của ECMA để làm cho JavaScript mạnh mẽ hơn một chút. Nó mang đến cho JS một nỗ lực để làm cho nó ít nhất một chút "nghiêm ngặt" (các ngôn ngữ khác thực hiện các quy tắc nghiêm ngặt từ những năm 90). Nó thực sự "buộc" các nhà phát triển JavaScript tuân theo một số loại thực tiễn tốt nhất về mã hóa . Tuy nhiên, JavaScript rất dễ hỏng. Không có thứ gì như biến được gõ, phương thức gõ, v.v. dễ dàng hơn để gỡ lỗi.

10
PippoApps.com

use strict là một cách để làm cho mã của bạn an toàn hơn, vì bạn không thể sử dụng các tính năng nguy hiểm có thể hoạt động không như bạn mong đợi. Và như đã được viết trước khi nó làm cho mã nghiêm ngặt hơn.

Use Strict được sử dụng để hiển thị các lỗi phổ biến và lặp đi lặp lại để nó được xử lý khác nhau và thay đổi cách chạy tập lệnh Java, những thay đổi đó là:

  • Ngăn chặn tình cờ toàn cầu

  • Không trùng lặp

  • Loại bỏ với

  • Loại bỏ sự ép buộc này

  • An toàn hơn ()

  • Lỗi cho bất biến

bạn cũng có thể đọc bài viết này để biết chi tiết 

10
Wesam

Thông thường, JavaScript không tuân theo các quy tắc nghiêm ngặt, do đó làm tăng cơ hội lỗi. Sau khi sử dụng "use strict", mã JavaScript phải tuân theo bộ quy tắc nghiêm ngặt như trong các ngôn ngữ lập trình khác như sử dụng dấu chấm dứt, khai báo trước khi khởi tạo, v.v. 

Nếu "use strict" được sử dụng, mã phải được viết bằng cách tuân theo một bộ quy tắc nghiêm ngặt, do đó làm giảm khả năng xảy ra lỗi và sự mơ hồ.

9
Bikash Chapagain

Chế độ nghiêm ngặt của JavaScript JavaScript được giới thiệu trong ECMAScript 5.

(function() {
  "use strict";
  your code...
})();

Viết "use strict"; ở đầu tệp JS của bạn bật nghiêm ngặt Kiểm tra cú pháp. Nó thực hiện các nhiệm vụ sau đây cho chúng tôi:

  1. hiển thị lỗi nếu bạn cố gán cho biến không được khai báo

  2. ngăn bạn ghi đè các thư viện hệ thống JS chính

  3. cấm một số tính năng ngôn ngữ không an toàn hoặc dễ bị lỗi

use strict cũng hoạt động bên trong các chức năng riêng lẻ. Luôn luôn là một cách thực hành tốt hơn để bao gồm use strict trong mã của bạn.

Vấn đề tương thích trình duyệt: Các chỉ thị "sử dụng" có nghĩa là tương thích ngược. Các trình duyệt không hỗ trợ chúng sẽ chỉ thấy một chuỗi ký tự không được tham chiếu thêm. Vì vậy, họ sẽ vượt qua nó và đi tiếp.

8
Rabin Pantha

Chế độ nghiêm ngặt có thể ngăn rò rỉ bộ nhớ.

Vui lòng kiểm tra chức năng bên dưới được viết ở chế độ không nghiêm ngặt:

function getname(){
    name = "Stack Overflow"; // Not using var keyword
    return name;
}
getname();
console.log(name); // Stack Overflow

Trong hàm này, chúng tôi đang sử dụng một biến có tên name bên trong hàm. Trong nội bộ, trình biên dịch trước tiên sẽ kiểm tra xem có bất kỳ biến nào được khai báo với tên cụ thể đó trong phạm vi chức năng cụ thể đó không. Vì trình biên dịch hiểu rằng không có biến như vậy, nên nó sẽ kiểm tra trong phạm vi bên ngoài. Trong trường hợp của chúng tôi, nó là phạm vi toàn cầu. Một lần nữa, trình biên dịch hiểu rằng cũng không có biến nào được khai báo trong không gian toàn cầu với tên đó, vì vậy nó tạo ra một biến như vậy cho chúng ta trong không gian toàn cầu. Về mặt khái niệm, biến này sẽ được tạo trong phạm vi toàn cầu và sẽ có sẵn trong toàn bộ ứng dụng.

Một kịch bản khác là, giả sử, biến được khai báo trong hàm con. Trong trường hợp đó, trình biên dịch kiểm tra tính hợp lệ của biến đó trong phạm vi bên ngoài, tức là, hàm cha. Chỉ sau đó nó sẽ kiểm tra trong không gian toàn cầu và tạo ra một biến cho chúng tôi ở đó. Điều đó có nghĩa là kiểm tra bổ sung cần phải được thực hiện. Điều này sẽ ảnh hưởng đến hiệu suất của ứng dụng.


Bây giờ hãy viết chức năng tương tự trong chế độ nghiêm ngặt.

"use strict"
function getname(){
    name = "Stack Overflow"; // Not using var keyword
    return name;
}
getname();
console.log(name); 

Chúng tôi sẽ nhận được các lỗi sau.

Uncaught ReferenceError: name is not defined
at getname (<anonymous>:3:15)
at <anonymous>:6:5

Ở đây, trình biên dịch ném lỗi tham chiếu. Trong chế độ nghiêm ngặt, trình biên dịch không cho phép chúng ta sử dụng biến mà không khai báo nó. Vì vậy, rò rỉ bộ nhớ có thể được ngăn chặn. Ngoài ra, chúng ta có thể viết mã tối ưu hơn.

1
Jerin K Alexander

"Sử dụng nghiêm ngặt"; Xác định rằng mã JavaScript phải được thực thi trong "chế độ nghiêm ngặt".

  • Lệnh "sử dụng nghiêm ngặt" là mới trong ECMAScript phiên bản 5.
  • Đây không phải là một tuyên bố, mà là một biểu thức nghĩa đen, bị bỏ qua bởi Các phiên bản JavaScript.
  • Mục đích của "sử dụng nghiêm ngặt" là chỉ ra rằng mã phải là Được thực thi trong "chế độ nghiêm ngặt".
  • Với chế độ nghiêm ngặt, ví dụ, bạn không thể sử dụng các biến không được khai báo.

Tất cả các trình duyệt hiện đại đều hỗ trợ "sử dụng nghiêm ngặt" ngoại trừ Internet Explorer 9 trở xuống.

Bất lợi

Nếu nhà phát triển sử dụng thư viện ở chế độ nghiêm ngặt, nhưng nhà phát triển đã quen làm việc ở chế độ bình thường, họ có thể gọi một số hành động trên thư viện sẽ không hoạt động như mong đợi.

Tồi tệ hơn, vì nhà phát triển ở chế độ bình thường, họ không có lợi thế khi bị ném thêm lỗi, do đó, lỗi có thể thất bại trong âm thầm.

Ngoài ra, như được liệt kê ở trên, chế độ nghiêm ngặt ngăn bạn làm những việc nhất định.

Mọi người thường nghĩ rằng bạn không nên sử dụng những thứ đó ngay từ đầu, nhưng một số nhà phát triển không thích ràng buộc và muốn sử dụng tất cả các tính năng của ngôn ngữ.

0
ashish

Rất đơn giản "sử dụng nghiêm ngặt"; ở đầu tập tin JS của bạn bật kiểm tra cú pháp nghiêm ngặt.

1: -Điều này sẽ không cho phép bạn khai báo thử gán cho biến không được khai báo, sẽ hiển thị lỗi. 2: -Điều này sẽ xử lý việc cấm một số tính năng ngôn ngữ không an toàn hoặc dễ bị lỗi.

function abc() { "use strict"; your code... };

0
Abhijeet Singh