Helpex - Trao đổi & giúp đỡ Đăng nhập
26

Tôi đã thấy một vài nơi trên internet quy định một cách thụ động 'use strict;'phải nằm ở dòng đầu tiên của phạm vi chức năng mà bạn muốn áp dụng chỉ thị hành vi.

Tuy nhiên, theo kinh nghiệm của tôi, không có vấn đề gì nếu có nhận xét trước nó.

/* some comment */
'use strict';

Có sự thiếu hụt chức năng khi có ý kiến ​​trước khi có chỉ thị, hay đó hoàn toàn là vấn đề về phong cách? Điều này có được định nghĩa ở bất kỳ đâu trong đặc tả ECMAScript không?

Tôi không chỉ yêu cầu môi trường V8 (node.js) mà còn cho cả các trình duyệt.

26 hữu ích 4 bình luận 3.0k xem chia sẻ
22

Có, bạn có thể thêm nhận xét trước "use strict";- nó chỉ phải xuất hiện trước bất kỳ câu lệnh nào .

Xem ví dụ này từ MDN

// Whole-script strict mode syntax
"use strict";
var v = "Hi!  I'm a strict mode script!";
22 hữu ích 0 bình luận chia sẻ
19

Theo tiêu chuẩn ECMAScript 262 phiên bản thứ 5, phần 14.1 :

. . . các sản phẩm SourceElement ban đầu của một Chương trình hoặc FunctionBody và trong đó mỗi ExpressionStatement trong chuỗi bao gồm hoàn toàn một mã thông báo StringLiteral theo sau dấu chấm phẩy

Nhấn mạnh của tôi

và tiêu chuẩn ECMAScript 262 phiên bản thứ 6 phần 14.1.1 :

Lời mở đầu Chỉ thị là. . . các StatementListItem ban đầu hoặc ModuleItem tác phẩm của một FunctionBody, một ScriptBody, hoặc một ModuleBody.

Nhấn mạnh của tôi


Có lẽ nói một cách đơn giản hơn, phần 7.4 của ECMAScript 5 ed. tiêu chuẩn (phần 11.4 của tiêu chuẩn ECMAScript phiên bản thứ 6) nêu rõ:

Nhận xét hoạt động giống như khoảng trắng và bị loại bỏ

Vì nhận xét không phải là tuyên bố và cuối cùng sẽ bị loại bỏ, use strict;có thể xuất hiện sau chúng vì nó là tuyên bố hiệu quả đầu tiên trong nội dung.


Một bản cập nhật sau đó nhiều năm - nhiều hơn hoặc ít hơn, nhiều bối cảnh hơn.

Hầu hết các trình phân tích cú pháp đều có một bước lexing và một bước phân tích cú pháp. Đầu tiên, Lexing, phá vỡ xuống mã nguồn văn bản vào thẻ sờ thấy hơn (chẳng hạn như left angle bracket, identifier, comma, string literal, vv) và các bước phân tích thực sự không một cái gì đó với họ - trong nhiều trường hợp (và chắc chắn trong trường hợp Javascript), biến nó thành cái được gọi là Cây cú pháp trừu tượng (hay viết tắt là AST).

Hai điều làm cho điều này "được phép", đặc biệt là theo nhận xét này - một là thực tế là các nhận xét sẽ bị loại bỏ, thường xảy ra trong quá trình ghép từ'use strict';phải là câu lệnh đầu tiên, thường được kiểm tra trong quá trình phân tích cú pháp .

Vì lexing xuất hiện trước khi phân tích cú pháp, do đó việc kiểm tra 'use strict';sẽ không bao giờ thực sự thấy các nhận xét thậm chí có khả năng xảy ra sự cố với chúng.

19 hữu ích 2 bình luận chia sẻ
3

Theo MDN , use strict;phải là câu lệnh đầu tiên trong một tập lệnh hoặc hàm. Nhận xét không phải là tuyên bố.

3 hữu ích 0 bình luận chia sẻ
0

Đúng. Nhận xét có thể được đặt trước tuyên bố "sử dụng nghiêm ngặt". Các công cụ JavaScript chỉ bỏ qua các nhận xét, vì vậy đối với tất cả các ý định và mục đích, câu lệnh "sử dụng nghiêm ngặt" nằm ở đầu phạm vi chức năng.

0 hữu ích 0 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ javascript strict , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm

loading