Không khuyến khích sử dụng sử dụng nghiêm ngặt trong ES6?


200

Tôi chưa quen với ECMAScript 6. Tôi vừa nhân bản repo React Starter Kit, sử dụng ES6 cho mã ứng dụng. Tôi đã rất ngạc nhiên khi thấy rằng kẻ nói dối được cấu hình để cấm các lần xuất hiện của lệnh use strictnày, điều mà tôi nghĩ là được khuyến nghị trong JavaScript trước ES6. Vậy quan điểm là gì?



Câu trả lời:


257

Các mô-đun ES6 luôn ở chế độ nghiêm ngặt. Để trích dẫn phần có liên quan của thông số kỹ thuật :

10.2.1 Mã chế độ nghiêm ngặt

Một đơn vị cú pháp ECMAScript Script có thể được xử lý bằng cách sử dụng cú pháp và ngữ nghĩa chế độ không hạn chế hoặc nghiêm ngặt. Mã được hiểu là mã chế độ nghiêm ngặt trong các tình huống sau:

  • 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 của hàm [[ECMAScriptCode]] có chứa Chỉ thị Nghiêm 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ỉ thị Nghiêm Sử dụng.

11
Sự khác biệt giữa mã toàn cầu và mã mô-đun là gì? Tôi nghĩ rằng tôi đang hiểu nhầm, vì mã mô-đun đối với tôi có nghĩa là mọi thứ trong module.js nếu tôi yêu cầu ('mô-đun').
Có thể vào ngày

8
@BrynnMahsman ES2015 có các mô đun gốc. CommonJS chỉ là một thư viện và không liên quan gì đến ngôn ngữ.
Kit Sunde

18
Cám ơn phản hồi của bạn. Vì vậy, nó không phải là một mô-đun ES6 nếu nó không sử dụng các từ khóa nhập / xuất? Hiện tại tôi đang sử dụng Nút 4 và tôi không có quyền truy cập vào / xuất từ ​​khóa và tôi chỉ sử dụng mô-đun CommonJS.exports và yêu cầu () cùng với các tính năng ES6 được bật theo mặc định. Nó sẽ giải thích lý do tại sao tôi phải đặt sử dụng nghiêm ngặt ở đầu mỗi tệp. Vì vậy, về mặt kỹ thuật tôi vẫn đang viết các mô-đun CommonJS với một số tính năng ES6 được kích hoạt trong V8?
Có thể Oakes

7
Để kiểm tra chi tiết "nó có phải là một mô-đun không?" , xem nczonline.net/blog/2016/04/ trên "... trong khi sự hiện diện của nhập hoặc xuất có thể chỉ ra một mô-đun, việc thiếu hoặc nhập không thể hiện rõ rằng tệp không phải là mô-đun. không có cách nào hiệu quả để tự động phát hiện ra rằng một tệp là một mô-đun trong quá trình phân tích cú pháp. "
ptim

1
Chính xác thì "mô-đun" là gì? Tôi gặp strictlỗi (với cài đặt trước AirBnB ) trên tập lệnh chỉ bao gồm "use strict"; console.log('foo'). Đó có phải là một mô-đun?
Dan Dascalescu
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.