2010-08-20 25 views
7

En el siguiente código hay "función (i)", pero "i" no se ha declarado en ningún lugar anterior a esta declaración.¿Qué es "i" en "función (i)" en el siguiente JavaScript?

ul.css({width: 10, overflow: 'visible'}).retarder(100, function(i){ 
    i.css('visibility', 'visible').animate(
     {width: ul[0].wid,left:-50}, 
     {duration: 500, complete : function(){ 
     ul.css('overflow', 'visible'); 
     }} 
    ); 
}); 

Parece que podría ser similar a una declaración "this" de C++. ¿Es eso correcto?

+1

Esa es una función anónima como argumento. Por lo tanto, yo soy el primer argumento que la función acepta. El método del retardador llama a la función say, callback (10, 11, 12) y, por lo tanto, proporciona un valor para i. En este caso, i = 10 y todo lo demás se descarta. – srcspider

+0

Por cierto, 'i' es un nombre horrible para ese argumento, cámbielo a algo descriptivo –

Respuesta

4

i es solo un parámetro de función que se pasa por la función retarder a la función anónima.

lo que hace es:

ul.css({width: 10, overflow: 'visible'}).retarder(100, callback_function); 

y devolución de llamada se define a través de la función anónima:

function(i) { ... } 

Para que i es la definición del parámetro de la función anónima.

0

La variable i representa el objeto real (como palabra clave this)


explicar más:

1) es un parámetro a una función anónima, como podemos ver:

.retarder(100, function(i){...}) 

2) Es una referencia al objeto actual (this).

Cuando este plugin jQuery termina, se llama a la función de devolución de llamada, usando:

(callbackFunction)(this) 

Cuando se trata de parámetros.

+0

Como todos los demás han mencionado, es un parámetro para una función anónima. –

+0

Buddy, sí, es un parámetro para una función anónima ... pero, en este caso, es un parámetro que representa el objeto real = this. – Topera

+0

uh, ¿me importa explicarlo? – muhmuhten

1

La variable i en la función de declaración de función anónima (i) es el nombre utilizado para el primer parámetro dentro del cuerpo de la función. No corresponde a ninguna variable en otra parte de su página.

11

Se ve como una declaración de la función:

function(i) 
{ 
    // ..... 
} 

Así i es un valor que se pasa a la función (que está siendo declarado en línea como un función anónima) como primer parámetro, presumiblemente por el interior funcionamiento del método retarder en el que está pasando la función.

Vuelva a escribir el código por lo que es un poco más legible hace esto un poco más claro:

ul.css(
    { 
    width: 10, 
    overflow: 'visible' 
    } 
).retarder(100, function(i) 
    { 
    i.css('visibility', 'visible').animate(
     { 
     width: ul[0].wid, 
     left:-50 
     }, 
     { 
     duration: 500, 
     complete: function() 
      { 
      ul.css('overflow', 'visible'); 
      } 
     } 
    ); 
    } 
); 

Y, a continuación, puede volver a escribir que sea incluso más claro:

ul.css(
    { 
    width: 10, 
    overflow: 'visible' 
    } 
).retarder(100, functionToPassToRedtarder); 

function functionToPassToRetarder(i) 
{ 
    i.css('visibility', 'visible').animate(
    { 
     width: ul[0].wid, 
     left:-50 
    }, 
    { 
     duration: 500, 
     complete: functionToPassToComplete 
    } 
); 
} 

function functionToPassToComplete() 
{ 
    ul.css('overflow', 'visible'); 
} 
+6

alias. un 'argumento' – aviraldg

+0

@Aviral, yeup, exactamente, ... =) – Rob

7

Es un parámetro de función.

+0

¿por qué el voto a favor? La respuesta es ciertamente correcta, incluso si no es detallada. Explicate tú mismo. –

+0

+1 para corregir el downvote estúpido. – slebetman

+0

+1 upvoted por el bien de perder el comentario de downvoter :-) –

5

crea una función anónima que toma un único argumento, que luego se denominará i en la función.

+1

Si desea obtener técnicos, la función * formalmente * toma un solo parámetro. Es concebible que pueda pasar muchos ** argumentos ** y acceder a ellos a través de un objeto del mismo nombre. – ChaosPandion

2

Es posible que no comprenda esto si no está familiarizado con el uso de funciones anónimas en JavaScript. Usted es probablemente más familiarizados con algo como:

function double(i){ 
    return i + i; 
} 

i es un parámetro a la función double. En JavaScript, la misma función se podría hacer como:

var double = function(i){ 
    return i + i; 
}; 

en este caso una función anónima se crea y luego se asigna a una variable double. i sigue siendo solo un parámetro. Ambos pueden llamarse como double(3).

En el ejemplo que proporcionó, en lugar de asignar la función anónima a una variable, se pasó como un argumento a otra función.

1

Si usted está tratando de descifrar el código ofuscado que creo que es así, entonces usted está probablemente en busca de esta definición de la función ...

$.fn.retarder = function(delay, method){ 
var node = this; 
if (node.length){ 
    if (node[0]._timer_) 
     clearTimeout(node[0]._timer_); 
    node[0]._timer_ = setTimeout(function(){ method(node); }, delay); 
} 
return this; }; 

tuve que cavar un poco más profundo para encontrarlo porque fue generado dinámicamente dentro de un eval().

Para responder a su pregunta, el parámetro "i" es el objeto "ul" (en el código que ha publicado).

Si observa la función de retardador, devuelve "esto", al igual que la mayoría de los demás complementos de jquery, por lo que mantiene la capacidad de encadenamiento de los complementos.

¿no es divertir a la ofuscación?