Câu trả lời:
Bao gồm 'use strict';
như là câu lệnh đầu tiên trong hàm gói, vì vậy nó chỉ ảnh hưởng đến hàm đó. Điều này ngăn ngừa các vấn đề khi ghép các tập lệnh không nghiêm ngặt.
Xem bài đăng trên blog mới nhất của Douglas Crockford Chế độ nghiêm ngặt sẽ đến thị trấn .
Ví dụ từ bài đăng đó:
(function () {
'use strict';
// this function is strict...
}());
(function () {
// but this function is sloppy...
}());
Cập nhật: Trong trường hợp bạn không muốn bọc chức năng ngay lập tức (ví dụ: đây là mô-đun nút), thì bạn có thể tắt cảnh báo.
Đối với JSLint (mỗi Zhami ):
/*jslint node: true */
Đối với JSHint :
/*jshint strict:false */
hoặc (theo Laith Shadeed )
/* jshint -W097 */
Để vô hiệu hóa bất kỳ cảnh báo tùy ý nào từ JSHint, hãy kiểm tra bản đồ trong mã nguồn JSHint (chi tiết trong tài liệu ).
Cập nhật 2: Tùy chọn hỗ trợ JSHintnode:boolean
. Xem .jshintrc
tại github .
/* jshint node: true */
-1
/*jshint strict:false */
, để làm rõ hơn những gì bạn đang làm (trừ khi có một lợi ích cụ thể cho mã số của bạn mà tôi không biết)
"use strict";
một lần cho mỗi tệp.
Nếu bạn đang viết các mô-đun cho NodeJS, chúng đã được gói gọn. Nói với JSLint rằng bạn đã có nút bằng cách đưa vào đầu tệp của bạn:
/*jslint node: true */
/*jshint strict:false */
"node": true
.jshintrc
Tôi muốn đề nghị sử dụng jshint thay thế.
Nó cho phép triệt tiêu cảnh báo này thông qua /*jshint globalstrict: true*/
.
Nếu bạn đang viết một thư viện, tôi sẽ chỉ đề xuất sử dụng toàn cầu nghiêm ngặt nếu mã của bạn được gói gọn trong các mô-đun như trường hợp với nodejs.
Nếu không, bạn sẽ buộc tất cả những người đang sử dụng thư viện của bạn vào chế độ nghiêm ngặt.
strict: 'global'
ngay bây giờ và xem jshint.com/docs/options/#globalstrict
Tôi đã bắt đầu tạo một ứng dụng Node.js / browserify sau bài đăng trên blog Cross Platform JavaScript . Và tôi gặp phải vấn đề này, bởi vì Gruntfile hoàn toàn mới của tôi đã không vượt qua jshint.
May mắn thay tôi đã tìm thấy một câu trả lời trong cuốn sách Leanpub về Grunt :
Nếu chúng tôi thử ngay bây giờ, chúng tôi sẽ quét Gruntfile của chúng tôi và nhận được một số lỗi:
$ grunt jshint Running "jshint:all" (jshint) task Linting Gruntfile.js...ERROR [L1:C1] W097: Use the function form of "use strict". 'use strict'; Linting Gruntfile.js...ERROR [L3:C1] W117: 'module' is not defined. module.exports = function (grunt) { Warning: Task "jshint:all" failed. Use --force to continue.
Cả hai lỗi là do Gruntfile là một chương trình Node và theo mặc định, JSHint không nhận ra hoặc cho phép sử dụng
module
và phiên bản chuỗi củause strict
. Chúng ta có thể đặt quy tắc JSHint sẽ chấp nhận các chương trình Node của chúng ta. Hãy chỉnh sửa cấu hình tác vụ jshint của chúng tôi và thêm khóa tùy chọn:jshint: { options: { node: true }, }
Thêm node: true
vào jshint options
, để đưa jshint vào "Chế độ nút", đã loại bỏ cả hai lỗi cho tôi.
Thêm một tệp .jslintrc (hoặc .jshintrc trong trường hợp jshint) ở thư mục gốc của dự án của bạn với nội dung sau:
{
"node": true
}
Không có gì sai hoàn toàn với dạng chuỗi.
Thay vì tránh hình thức nghiêm ngặt "toàn cầu" vì lo lắng về việc kết hợp các javascript không nghiêm ngặt, có lẽ tốt hơn là chỉ sửa lỗi javascript không nghiêm ngặt chết tiệt thành nghiêm ngặt.
Tôi nghĩ rằng tất cả mọi người đã bỏ lỡ phần "đột nhiên" của câu hỏi này. Rất có thể, .jshintrc của bạn có lỗi cú pháp, do đó, nó không bao gồm dòng 'trình duyệt'. Chạy nó thông qua trình xác nhận json để xem lỗi ở đâu.
Đây là cách đơn giản: Nếu bạn muốn nghiêm ngặt với tất cả mã của mình, hãy thêm "use strict";
vào lúc bắt đầu JavaScript.
Nhưng nếu bạn chỉ muốn nghiêm ngặt với một số mã của mình, hãy sử dụng mẫu hàm. Dù sao đi nữa, tôi khuyên bạn nên sử dụng nó khi bắt đầu JavaScript bởi vì điều này sẽ giúp bạn trở thành một lập trình viên giỏi hơn.
"use strict";
ở đầu tệp JS của mình, vì vậy điều này có thể không hoàn toàn đúng.
"use strict";
, nơi nó chỉ được đặt ở đầu mã của bạn. Nó chỉ cho phép "use strict;"
khi được bọc trong một chức năng. (Tuy nhiên, JS_Hint_ cho phép bạn sử dụng biểu mẫu chung - xem câu trả lời ở trên để biết cài đặt cần thiết).