2011-01-31 20 views
5

Al escribir código como este JSLint se queja de variables globales implícitas:Evitar globales implicados en Javascript (JSLint)

var Test = (function(){ 
    var fnc = function(x){ 
     alert("pew: "+x); 
    }; 

    return { 
     fnc: fnc 
    }; 
}()); 

Test.fnc("hat"); 

(específicamente, 'implícita mundial: alerta 4')

Lo que se considera la forma correcta ¿para evitar esto? Mi respuesta instintiva es esto, pero no estoy convencido de que es 'correcto':

var Test2 = (function(global){ 
    var alert = global.alert; 

    var fnc = function(x){ 
     alert("pew: "+x); 
    }; 

    return { 
     fnc: fnc 
    }; 
}(this)); 

Test2.fnc("hat"); 

Editar: El consenso parece ser que el problema no es el hecho de que estoy accediendo a un mundial, es más que no estoy diciendo jslint qué son los globales. Voy a dejar esto abierto un poco más para ver si alguien más ha contribuido, entonces elegiré una respuesta.

Respuesta

8

puede anteponer su archivo con un comentario

/*global alert $ document window*/

Esto es generalmente cómo le digo a JSLint que no da a entender, pero externa.

Esto es tanto discreto como le dice a sus compañeros programadores que declare estas variables como externas, lo cual es útil para programas de varios archivos más grandes.

+2

IIRC no las declaraciones de nombres de variables deben estar separadas por comas? –

+0

@ZackTheHuman hay espacio separado. Resulta que JSLint dice que hay una coma separada. Siempre he usado una lista de espacios separados sin errores. Probablemente maneja ambos – Raynos

+0

Tenga en cuenta que no debe haber un espacio entre el inicio del comentario y 'global'; de lo contrario, jslint no lo procesa. – oyenamit

4

Utilice las opciones "asumir un navegador" y "aceptar consola, alerta, ..." de jsLint para hacer que jsLint conozca esas funciones. Consulte http://www.jslint.com/lint.html#options para obtener una lista de todas las opciones disponibles.

0

creo que su forma es correcta (y bueno también), pero no hay necesidad de declarar global.alert, sólo tiene que utilizar global.alert("pew: "+x);

+0

La 'var alert = global.alert' es realmente solo por conveniencia, por lo que se comporta de la misma manera que si dejara el error en. – david

+0

No veo ninguna conveniencia al usarlo. Pero independientemente de esta parte, creo que su solución no solo es correcta, es buena. –

1

Para aquellos en busca de JSHint lugar, hay un "navegador" opción que puede ser ajustado a "verdadero" y maneja todos los globales comunes. Lo mismo para "jquery". Aprendí esto del gradle-js-plugin source code.