JSLint: đã được sử dụng trước khi nó được định nghĩa


95

Xin chào, tôi có 3 tệp javascript.

  • jquery.js
  • tiện ích.js
  • file1.js

Trong file1.js tôi có

jQuery.noConflict()
jQuery(document).ready(function($) { 
 // ....
});

Tôi gặp lỗi 'jQuery' đã được sử dụng trước khi nó được xác định. và 'tài liệu' đã được sử dụng trước khi nó được định nghĩa.

Làm cách nào để tôi thoát khỏi cảnh báo này một cách an toàn.

Nếu tôi làm

var document = document || {}; 

thì trong tiện ích.js của tôi nếu nó được sử dụng, nó sẽ là null trong IE và ok trong firefox.

Giải pháp tốt nhất cho điều này là gì?


bản sao có thể có của JS Lint: 'shortcut' đã được sử dụng trước khi nó được định nghĩa . Ngoài ra, hãy đảm bảo rằng bạn đã chọn Trình duyệt giả định trong các tùy chọn.
Andy E

@ChunpingWang Nhận thấy rằng bạn vẫn đang hoạt động trên SO và câu hỏi này thiếu câu trả lời được chấp nhận. Một trong hai câu trả lời này có thiếu điều gì đó cần thiết để làm cho chúng được chấp nhận không? Có vẻ như câu trả lời của Quentin sẽ giải quyết được vấn đề như đã hỏi. Bất kỳ thông tin bổ sung cần thiết để trả lời câu hỏi của bạn?
ruffin

Câu trả lời:


169

Từ tài liệu

JSLint cũng nhận ra một chỉ thị / * global * / có thể cho JSLint biết rằng các biến được sử dụng trong tệp này đã được định nghĩa trong các tệp khác. Nhận xét có thể chứa danh sách tên được phân tách bằng dấu phẩy. Mỗi tên có thể được theo sau bởi dấu hai chấm và đúng hoặc sai, true cho biết rằng biến có thể được gán bởi tệp này và false cho biết rằng không được phép gán (đó là mặc định). Chỉ thị tôn trọng phạm vi chức năng.

Một số hình cầu có thể được xác định trước cho bạn. Chọn tùy chọn Giả sử trình duyệt (browser) để xác định trước các thuộc tính chung tiêu chuẩn được cung cấp bởi các trình duyệt web, chẳng hạn như document và addEventListener.

Thí dụ:

/*jslint browser: true*/
/*global $, jQuery*/

25
lưu ý: bạn không thể đặt dấu cách trước globalvì vậy /* global var, var2 */không hoạt động. /*global var, var2*/công trình
radixhound

4
Số nhiều tương đương và hoạt động tốt: /*globals */và cũng có ý nghĩa hơn khi thêm danh sách các biến
Robert Koritnik

2
Vì vậy, giải pháp để JSLint phàn nàn về điều gì đó bị thiếu trong tất cả các tệp của bạn, đó là thêm một dòng vào tất cả các tệp của bạn ... Đây là lời khuyên khủng khiếp.
Cerin

@Cerin - Không, giải pháp để JSLint phàn nàn về việc bạn sử dụng một biến mà nó không thể tìm thấy định nghĩa là nói với nó rằng bạn đã định nghĩa nó trong một tệp khác (trái ngược với, ví dụ: mắc lỗi đánh máy trong tên biến điều đó sẽ phá vỡ chương trình của bạn sau này).
Quentin

1
@Quentin, Có, và bản sửa lỗi của bạn cho điều đó yêu cầu bạn phải "cho biết về jQuery" trong mỗi tệp. Đó là một khối lượng công việc khổng lồ cho một thứ không mang lại lợi ích gì. Bạn cũng có thể chỉ cần tắt kiểm tra đó trong JSLint.
Cerin

30

Như Quentin nói, có một /*global*/chỉ thị.

Đây là một ví dụ (đặt cái này ở đầu tệp):

/*global var1,var2,var3,var4,var5*/

Đảm bảo rằng câu lệnh chung ban đầu nằm trên cùng một dòng với /*, nếu không nó sẽ bị hỏng.

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.