2011-04-01 15 views
9

Para que no haya malentendidos, esta pregunta no se trata de permitir parámetros opcionales en una función JS.¿Cuál es el propósito/beneficio de usar parámetros ignorados en una función de JavaScript?

Mi pregunta es motiviated por la función jQuery parseXML, que se define en jQuery.js de la siguiente manera:

// Cross-browser xml parsing 
// (xml & tmp used internally) 
parseXML: function(data, xml, tmp) { 
    ... 
} 

Dentro del cuerpo de la función, los parámetros xml yy tmp se asignan tanto antes de ser utilizados. Eso significa que se están utilizando como variables locales, por lo que la función se podrían haber definido así:

parseXML: function(data) { 
    var xml, tmp; 
    ... 
} 

¿Cuál es la ventaja de hacer que la primera manera, aparte de ahorrar unos cuantos personajes en la versión miniaturizada de jQuery.js ?

+2

para recursividad quizás? –

+4

@fireeyedboy: como están configurados antes de acceder, no estoy seguro de cómo se podrían usar para la recursión. Creo que Joel identificó correctamente la respuesta a su propia pregunta, para salvar algunos personajes. – Ender

+0

@fireeyedboy - parseXML no es recursivo –

Respuesta

3

Si definimos dos funciones ...

function a (foo) { } 
function b (foo, bar, baz) {} 

... que van a reflejar resultados distintos lengths ...

console.log([a.length, b.length]); // logs [1, 3] 

Es muy raro ver this little known feature de JavaScript utilizado.

Pero aparte de afeitar un par de bytes del tamaño del archivo minificado, esta es la única otra razón que se me ocurre.

+0

+1 Ciertamente no era consciente de eso. –

1

En general, puede agregar parámetros no utilizados a una función para ajustarse a una firma de función previamente acordada, si va a pasar esta función a otra función como una devolución de llamada o continuación, y el contrato de la API dice "I llame a su devolución de llamada con estos parámetros ", y no necesita todos los parámetros para hacer lo que desea hacer en la devolución de llamada. (Esto se aplicaría a cualquier idioma, no solo a JavaScript.)

En este caso específico, no sé. ¿Cómo se usa parseXML? ¿se lo llama directamente o se usa como argumento para otras funciones que podrían esperar una función de 3 argumentos?

+3

Eso tampoco lo es. A JavaScript no le importa si no pasa todos los parámetros que espera, o si pasa más de lo esperado. Eche un vistazo a esta demostración para comprobarla: http://jsfiddle.net/Ender/aEgyF/ – Ender

+0

Sí, le creo sin buscar pruebas. Solo estaba describiendo las razones por las que * podrías * hacer eso, aunque supongo que en JS esto no es válido. (También, miré la fuente jQuery.js y respondí mi propia pregunta sobre cómo se usa parseXML: se puede usar como argumento para otras funciones, pero AFAICT solo aprobarían el primer argumento.) – metamatt

1

(xml & tmp used internally)

usted no entiende el significado. No significan "internamente" dentro de la función. Significan internamente dentro de la biblioteca. La API pública de esta función tiene un parámetro (datos). La API privada de esta función tiene 3 parámetros.

Esto es común en jQuery. En general, estas funciones pueden funcionar con y sin efectos secundarios. La API sin efectos secundarios es pública y jQuery en sí pasará más parámetros para causar efectos secundarios que usted, como usuario, no debería estar haciendo.

+1

+1 para aclarar el significado pretendido de "usado internamente". Básicamente, entonces, algunas funciones tienen parámetros opcionales que no son parte de la API pública. Sin embargo, en el caso de 'parseXML', los parámetros" adicionales "no pueden causar efectos secundarios porque se sobrescriben antes de ser utilizados. Tal vez fueron utilizados para causar efectos secundarios en una versión anterior. –

Cuestiones relacionadas