JSLint: digunakan sebelum didefinisikan

95

Hai, saya memiliki 3 file javascript.

  • jquery.js
  • utility.js
  • file1.js

Di file1.js saya punya

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

Saya mendapatkan kesalahan 'jQuery' digunakan sebelum didefinisikan. dan 'dokumen' digunakan sebelum didefinisikan.

Bagaimana cara menghilangkan peringatan ini dengan aman.

Jika aku melakukan

var document = document || {}; 

kemudian di utility.js saya jika digunakan, itu akan menjadi null di IE dan ok di firefox.

Apa solusi terbaik untuk ini?

Chun ping Wang
sumber
kemungkinan duplikat JS Lint: 'shortcut' digunakan sebelum didefinisikan . Selain itu, pastikan Anda telah memilih browser Assume dalam opsi.
Andy E
@ChunpingWang Perhatikan bahwa Anda masih aktif di SO dan pertanyaan ini kehilangan jawaban yang diterima. Apakah salah satu dari jawaban ini kehilangan sesuatu yang diperlukan untuk membuatnya dapat diterima? Sepertinya jawaban Quentin akan menyelesaikan masalah seperti yang ditanyakan. Adakah informasi tambahan yang diperlukan untuk menjawab pertanyaan Anda?
ruffin

Jawaban:

169

Dari dokumentasi

JSLint juga mengenali perintah / * global * / yang dapat menunjukkan ke JSLint bahwa variabel yang digunakan dalam file ini ditentukan di file lain. Komentar dapat berisi daftar nama yang dipisahkan koma. Setiap nama secara opsional dapat diikuti oleh titik dua dan benar atau salah, benar menunjukkan bahwa variabel dapat ditetapkan oleh file ini, dan salah menunjukkan bahwa tugas tidak diperbolehkan (yang merupakan default). Direktif menghormati ruang lingkup fungsi.

Beberapa global dapat ditentukan sebelumnya untuk Anda. Pilih opsi Asumsikan browser (browser) untuk menentukan properti global standar yang disediakan oleh browser web, seperti document dan addEventListener.

Contoh:

/*jslint browser: true*/
/*global $, jQuery*/
Quentin
sumber
25
catatan: Anda tidak dapat meletakkan spasi sebelumnya globalsehingga /* global var, var2 */tidak berfungsi. /*global var, var2*/bekerja
radixhound
4
Jamak setara dan berfungsi juga: /*globals */dan juga lebih masuk akal saat menambahkan daftar variabel
Robert Koritnik
2
Jadi solusi untuk JSLint mengeluh tentang sesuatu yang hilang dari semua file Anda adalah dengan menambahkan baris ke semua file Anda ... Ini adalah nasihat yang buruk.
Cerin
@Cerin - Tidak, solusi untuk JSLint yang mengeluh tentang Anda menggunakan variabel yang tidak dapat ditemukan definisinya adalah dengan mengatakan bahwa Anda mendefinisikannya di file lain (sebagai lawan, misalnya, membuat kesalahan ketik pada nama variabel yang akan merusak program Anda nanti).
Quentin
1
@Quentin, Ya, dan perbaikan Anda untuk itu mengharuskan Anda "menceritakannya tentang jQuery" di setiap file. Itu pekerjaan yang sangat banyak untuk sesuatu yang tidak memberikan manfaat. Anda mungkin juga menonaktifkan pemeriksaan itu di JSLint.
Cerin
30

Seperti yang dikatakan Quentin, ada a /*global*/ arahan.

Berikut ini contohnya (letakkan ini di bagian atas file):

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

Pastikan pernyataan global awal berada di baris yang sama dengan /*, atau akan rusak.

stanton
sumber