Il seguente JS:
(function() {
"use strict";
$("#target").click(function(){
console.log("clicked");
});
}());
I rendimenti:
test.js: line 5, col 3, '$' is not defined.
Se sfilacciato con JSHint 0.5.5. Qualche idea?
$ è indefinito.
Il seguente JS:
(function() {
"use strict";
$("#target").click(function(){
console.log("clicked");
});
}());
I rendimenti:
test.js: line 5, col 3, '$' is not defined.
Se sfilacciato con JSHint 0.5.5. Qualche idea?
$ è indefinito.
Risposte:
Se si utilizza una versione relativamente recente di JSHint, l'approccio generalmente preferito è quello di creare un file .jshintrc nella radice del progetto e inserirvi questa configurazione:
{
"globals": {
"$": false
}
}
Questo dichiara a JSHint che $ è una variabile globale e il falso indica che non deve essere sovrascritto.
Il file .jshintrc non era supportato nelle versioni davvero vecchie di JSHint (come v0.5.5 come la domanda originale del 2012). Se non puoi o non vuoi usare il file .jshintrc, puoi aggiungerlo nella parte superiore del file di script:
/*globals $:false */
C'è anche un'opzione jshint "jquery" abbreviata come si vede nella pagina delle opzioni JSHint .
/*global $:false, jQuery:false */.
/* global ... */? In genere imposto uno script con tutte le mie funzioni nel mio, mainquindi è complicato definirne uno per uno ...
Puoi anche aggiungere due righe al tuo .jshintrc
"globals": {
"$": false,
"jQuery": false
}
Questo dice a jshint che ci sono due variabili globali.
Tutto quello che devi fare è impostare "jquery": truenel tuo .jshintrc.
Per il riferimento alle opzioni JSHint :
jquery
Questa opzione definisce i globi esposti dalla libreria JavaScript jQuery.
Ecco una piccola lista felice da mettere nel tuo .jshintrc
che aggiungerò a questa lista col passare del tempo.
{
// other settings...
// ENVIRONMENTS
// "browser": true, // Is in most configs by default
"node": true,
// others (e.g. yui, mootools, rhino, worker, etc.)
"globals": {
"$":false,
"jquery":false,
"angular":false
// other explicit global names to exclude
},
}
Se si utilizza un editor IntelliJ come WebStorm, PyCharm, RubyMine o IntelliJ IDEA:
Nella sezione Ambienti di File / Impostazioni / JavaScript / Strumenti qualità codice / JSHint, fai clic sulla casella di controllo jQuery.
Invece di raccomandare il solito "spegni i globuli JSHint", ti consiglio di usare il modello del modulo per risolvere questo problema. Mantiene il tuo codice "contenuto" e migliora le prestazioni (basato sulle "10 cose che ho imparato su Jquery" di Paul Irish ).
Tendo a scrivere i miei pattern module in questo modo:
(function (window) {
// Handle dependencies
var angular = window.angular,
$ = window.$,
document = window.document;
// Your application's code
}(window))
Puoi ottenere questi altri vantaggi in termini di prestazioni (spiegati di più qui ):
windowviene minimizzata anche la dichiarazione dell'oggetto passato . es . window.alert()diventare m.alert().windowdell'oggetto.windowproprietà o un metodo, evitando costosi attraversamenti della catena dell'ambito, ad esempio prestazioni (più window.alert()veloci) rispetto a alert()(più lente)."}(window))"nel tuo esempio - ho avuto problemi anche con jQuery e Highcharts). Non ho trovato un modo per disattivarlo oltre a definire un globale per il file, che poi sconfigge lo scopo.
browser: truedice a JSHint che ti aspetti un ambiente browser (dove windowè già definito).
Se si utilizza un editor IntelliJ, in
Puoi digitare qualsiasi cosa, per esempio console:false, e lo aggiungerà anche alla lista (.jshintrc) - a livello globale.
Per correggere questo errore quando si utilizza l'implementazione JSHint online :
Probabilmente vuoi fare quanto segue,
const $ = window.$
per evitarlo lanciando un errore di sfilacciatura.
jquery.jsalla tua pagina?