JSLint: ถูกใช้ก่อนกำหนด


95

สวัสดีฉันมีไฟล์จาวาสคริปต์ 3 ไฟล์

  • jquery.js
  • ยูทิลิตี้ js
  • file1.js

ใน file1.js ฉันมี

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

ฉันได้รับข้อผิดพลาด 'jQuery' ถูกใช้ก่อนที่จะมีการกำหนด และมีการใช้ "เอกสาร" ก่อนกำหนด

ฉันจะกำจัดคำเตือนนี้อย่างปลอดภัยได้อย่างไร

ถ้าฉันทำ

var document = document || {}; 

จากนั้นในยูทิลิตี้ js ของฉันหากใช้มันจะเป็นโมฆะใน IE และตกลงใน firefox

อะไรคือทางออกที่ดีที่สุดสำหรับสิ่งนี้?


ซ้ำเป็นไปได้ของJS ผ้าสำลี: 'ทางลัด' ถูกนำมาใช้ก่อนที่จะถูกกำหนดไว้ ตรวจสอบให้แน่ใจว่าคุณได้เลือกเบราว์เซอร์ Assumeไว้ในตัวเลือก
Andy E

@ChunpingWang สังเกตเห็นว่าคุณยังคงใช้งาน SO และคำถามนี้ไม่มีคำตอบที่ยอมรับ คำตอบเหล่านี้ขาดสิ่งที่จำเป็นเพื่อให้เป็นที่ยอมรับหรือไม่? ดูเหมือนคำตอบของ Quentin จะแก้ปัญหาได้ตามที่ถาม ต้องการข้อมูลเพิ่มเติมเพื่อตอบคำถามของคุณหรือไม่?
ruffin

คำตอบ:


169

จากเอกสารประกอบ

JSLint ยังรับรู้คำสั่ง / * global * / ที่สามารถระบุให้ JSLint ทราบว่าตัวแปรที่ใช้ในไฟล์นี้ถูกกำหนดในไฟล์อื่น ความคิดเห็นสามารถมีรายการชื่อที่คั่นด้วยจุลภาค แต่ละชื่อสามารถเลือกตามด้วยเครื่องหมายจุดคู่และเป็นจริงหรือเท็จซึ่งระบุว่าไฟล์นี้อาจถูกกำหนดให้กับตัวแปรและเป็นเท็จระบุว่าไม่อนุญาตให้กำหนด (ซึ่งเป็นค่าเริ่มต้น) ขอบเขตการทำงานของคำสั่งเคารพ

ลูกโลกบางอย่างสามารถกำหนดไว้ล่วงหน้าสำหรับคุณได้ เลือกตัวเลือกสมมติเบราว์เซอร์ (เบราว์เซอร์) เพื่อกำหนดคุณสมบัติส่วนกลางมาตรฐานที่เว็บเบราว์เซอร์จัดเตรียมไว้ล่วงหน้าเช่น document และ addEventListener

ตัวอย่าง:

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

25
หมายเหตุ: คุณไม่สามารถเว้นวรรคก่อนglobalจึง/* global var, var2 */ไม่ทำงาน /*global var, var2*/works
radixhound

4
พหูพจน์มีค่าเท่ากันและใช้งานได้เช่นกัน/*globals */และยังสมเหตุสมผลกว่าเมื่อเพิ่มรายการตัวแปร
Robert Koritnik

2
ดังนั้นวิธีแก้ปัญหาของ JSLint ที่บ่นเกี่ยวกับสิ่งที่ขาดหายไปจากไฟล์ทั้งหมดของคุณเพื่อเพิ่มบรรทัดให้กับไฟล์ทั้งหมดของคุณ ... นี่เป็นคำแนะนำที่แย่มาก
Cerin

@Cerin - ไม่วิธีแก้ปัญหาที่ JSLint บ่นเกี่ยวกับคุณโดยใช้ตัวแปรที่ไม่สามารถหาคำจำกัดความได้คือการบอกว่าคุณกำหนดไว้ในไฟล์อื่น (ตรงข้ามกับเช่นการพิมพ์ชื่อตัวแปรผิด ซึ่งจะทำลายโปรแกรมของคุณในภายหลัง)
Quentin

1
@Quentin ใช่และการแก้ไขของคุณต้องการให้คุณ "บอกเกี่ยวกับ jQuery" ในทุกไฟล์ นั่นเป็นงานจำนวนมหาศาลสำหรับบางสิ่งที่ไม่มีประโยชน์ คุณอาจปิดการใช้งานการตรวจสอบนั้นใน JSLint
Cerin

30

ดังที่ Quentin กล่าวว่ามีไฟล์ /*global*/คำสั่ง

นี่คือตัวอย่าง (วางไว้ที่ด้านบนสุดของไฟล์):

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

ตรวจสอบให้แน่ใจว่าคำสั่งส่วนกลางเริ่มต้นอยู่ในบรรทัดเดียวกัน/*หรือมิฉะนั้นจะแตก

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.