Tengo un problema tratando de hacer una función global cuando se está involucrado en el cierre. En el código que aparece a continuación tienes un método anónimo que define a la nueva función en la window llamado, getNameField.

(function () {
    function alertError (msg) {
        alert(msg);
    }
    window.getNameField = function (fieldId) {
        try{
            if(!fieldId) {
                fieldId='name';
            }
            return document.getElementById(fieldId);
        } catch(e) {
            alertError(e);
        }
    };
}());

alert(getNameField().value);

Esto funciona bien en el navegador, pero cuando voy a ejecutar el código en JSLint.com con «Impedir variables no definidas» activado me da un error.

Problema en la línea 17 de caracteres de 7:
getNameField‘ no está definido.

Me puede ayudar a solucionar esto para que JSLint realmente entiende que esta función debe ser considerada global?

«Esto funciona bien en el navegador» Entonces, ¿cuál es el problema?
Yo sólo quería asegurarse de que yo estaba escribiendo el código por el javascript spec y no el uso de algún tipo de «hack».

OriginalEl autor Eric | 2010-10-12

3 Comentarios

  1. 18

    Su lugar podría llamar como window.getNameField:

    alert(window.getNameField().value);

    O podría definir una variable externa a la de cierre:

    var getNameField;
    
    (function(){
        getNameField=function(fieldId){
            //Code here...
        };
    }());
    
    alert(getNameField().value);
    A lo largo de las mismas líneas que podría crear una variable que actúa como un «espacio de nombres», donde la variable es un array asociativo y la función asignada a una de las entradas de la matriz asociativa. La desventaja, aunque de menor importancia, es que yo tendría que rediseñar todos los de mi código para utilizar el «espacio de nombres» variable si quería mantenerse constante.
    De hecho, tu puedes. No hay ningún problema grave con el código tal y como está.

    OriginalEl autor Tim Down

  2. 7

    Me gustaría tratar

    window["getNameField"] = function(fieldId) {
    Que va a hacer precisamente ninguna diferencia.

    OriginalEl autor jhurshman

  3. 2

    JSLint toma anotación de comentarios para este propósito. Leer aquí sobre el uso de un /*global */ comentario.

    En general, en el código JS quiero evitar el uso de comentarios, porque de los caracteres adicionales que se pueden descargar en el navegador. Yo continuamente podría añadir y eliminar los comentarios, pero no me gusta que paso manual.
    sí, el archivo es más pequeño si usted eliminar todos los comentarios. también es menor si se ejecuta a través de un javascript minimizer, lo que hace que reduce todos los nombres de variable y elimina todos los espacios en blanco innecesarios. en cualquiera de los casos, usted no quiere a desarrollar usando el «record» de la versión. tomar la insignificante diferencia de tamaño de fuente comentarios, o hacer un record de copia cuando «implementar».

    OriginalEl autor zem

Dejar respuesta

Please enter your comment!
Please enter your name here