2012-07-10 12 views
23

En this post, Nick Craver proporcionan una respuesta en la que se utiliza:¿Desea subrayar como variable de JavaScript?

function(_, id) 

este código no declaran el carácter de subrayado como una variable antes de usarla. Mi búsqueda en google y aquí solo indica referencias al uso del subrayado como prefijo, no como la variable en sí misma. ¿Qué hace? Me gusta la solución de Nick, pero ese poco me molesta.

Respuesta

29

He visto el guión bajo usado para indicar que la variable es una variable "no me importa". Significa que no importa y no se usa en absoluto.

En el caso que señaló, se usaba para indicar que su función tenía dos argumentos, pero solo necesitaba el segundo.

+0

Gracias Ivan. ¿Pero sabes por qué se puede usar sin ser declarado? Agradecería cualquier referencia que pueda leer más sobre este –

+0

En el ejemplo que proporcionó, '_' está siendo declarado como un argumento en la función. Él no está usándolo en absoluto. – Ivan

+0

¡Ah! Lo tengo. Gracias –

4

Por estilo, _ se usa generalmente como una variable de marcador de posición. Una variable que no se usará realmente en el alcance.

13

Underscore es un valid JS variable name. El parámetro denominado _ en el ejemplo anterior se puede usar como cualquier otra variable.

Sin embargo, generalmente se usa para indicar al lector (humano) posterior del código que no se usará lo que haya pasado. (El autor del código puede ser malvado/ignorante y usarlo en la función, sin embargo).

0

Como todos los otros carteles anteriores han dicho, se puede ver como un marcador de posición, en los casos en que no se espera que se use. He visto algo similar en python, cuando una función puede devolver múltiples valores, pero solo los necesarios se definen explícitamente.

Por ejemplo

a, _, c = foo(bar) 

En este caso se ignora el valor de retorno potencial de 'b' (que todavía pueda tener acceso a _), y 'a' y 'c' van a ser utilizado .

5

Como principiante, no pude reunir los muchos aspectos asociados con esta respuesta, que están dispersos en los comentarios y otras respuestas. Por lo tanto, voy a tratar de consolidarlos a continuación:

En primer lugar, en el trozo de código que se cita, se utiliza el argumento de subrayado de la siguiente manera: -

$(this).val('').attr('id', function(_, id) { return id + i }); 

De la documentación de jQuery para la función hereattr, existe una forma sobrecargada de attr que es .attr(attributeName, function). El function en esta forma se describe como

Tipo: Función (índice entero, cadena attr)

Por lo tanto, se espera dos parámetros. Sin embargo, en nuestro código, solo necesitamos el id, que es el segundo parámetro.

Ahora, debido a la forma JS maneja argumentos de la función, no podemos escribir como function(id), como JS sería asignar id-index (el primer argumento esperado para function). Por lo tanto, la función que escribimos debe tener dos parámetros.

Aquí, una convención estándar entra en juego. Como se menciona here,

El carácter de subrayado (_) se utiliza como una forma estándar para indicar un argumento de función no utilizada.

Sin embargo, esto es solo una convención y no una regla. Podríamos nombrar también el argumento no utilizado como index o unused. Es decir,

$(this).val('').attr('id', function(unused, id) { return id + i }); 

sería un equivalente válido.

Por lo tanto, dicho uso de _ para sustituir un argumento no utilizado se puede utilizar para cualquier otra función jQuery que tenga una forma anulada similar. Por ejemplo, en la respuesta this, podemos ver el uso del guión bajo en la llamada al $.text(). Solo para confirmar, $.text() tiene una forma anulada que acepta una función con dos argumentos, como se muestra en here.

-1

Aunque todas las respuestas explican que este es un estilo de código "piratear" para indicar un parámetro no utilizado, en general es una mala práctica (idea). Anulará cualquier variable _ declarada en un ámbito principal. Esto le impedirá usar bibliotecas que definan _ (como underscorejs, por ejemplo). Ni siquiera es una especie de optimización, ya que declara una variable de todos modos.

Debería utilizar un nombre descriptivo del parámetro y considerar _ como una variable regular. Acortar los nombres de las variables también se considera una mala práctica. Entonces, si planeas usar este "hack inteligente", por favor no lo hagas.

Cuestiones relacionadas