javascript - attribute - Valor devuelto por la cesión
title css (5)
Así se diseñó el lenguaje. Es consistente con la mayoría de los idiomas.
Tener una declaración de variable que devuelva algo que undefined
sea undefined
tiene sentido, porque nunca se puede usar la palabra clave var
en un contexto de expresión.
Tener la asignación como una expression
no una statement
es útil cuando desea establecer varias variables al mismo valor a la vez:
x = y = z = 2;
También se puede usar así:
x = 2*(y = z); // Set y = z, and x = 2*z
Sin embargo, ese no es el código más legible y probablemente se escribiría mejor como:
y = z;
x = 2*z;
¿Por qué la instrucción de asignación regular (por ejemplo, x = 5
) devuelve el valor asignado ( 5
en este caso), mientras que la asignación combinada con una declaración de variable ( var x = 5
) devuelve undefined
?
Obtuve los valores de retorno al ejecutar estas declaraciones en la consola de Javascript del navegador Chrome:
> var x = 5;
undefined
> y = 5;
5
Cuando escribes var x = 5;
declara x
e inicializa su valor en 5.
Esta es una VariableStatement
, no devuelve nada,
pero x=5
es una expression
que asigna 5 a x. como no hay x
, JavaScript crea implícitamente una x
global en el código normal
Edité mi respuesta por un comentario y algunas otras respuestas.
El operador de asignación no devuelve nada ... En el siguiente ejemplo, lo primero que hace JS parser es asignar 5 a y. Lo segundo es asignar y a x, y así sucesivamente. La asignación no se return
(no es una función, y en JS no tiene sintaxis C ++ para sobrecargar el comportamiento del operador). return
es algo más complejo que la asignación. return
construcción de return
no solo devuelve un valor, sino que también está cerrando el contexto actual, lo que hace que se destruya. También está cerrando cualquier contexto padre (patrón de cierre) si no hay otro niño usándolo. Entonces, por favor, NO me diga (en los comentarios) que el operador de asignación devuelve ningún valor. El operador de asignación en caso de JS es solo una construcción de lenguaje.
Esta construcción de lenguaje es útil en cadenas (y es por eso que todos hablan de regresar):
a = x = y = 5;
Cualquier variable no declarada es declarada automáticamente por el analizador en el alcance global. Si declara la variable explícitamente, no puede al mismo tiempo usarla en cadena, como esto:
a = var x = y = 5;
El uso adecuado del código anterior sería:
var x = y = 5;
a = x;
Por supuesto, puede usar corchetes para hacer que su código sea más claro, pero eso no significa que el código se comporte como una función.
Además, su ejemplo solo funciona en la consola JS, que no devuelve sino que imprime el resultado de una declaración o expresión. Significa que la consola JS trata el resultado de declarar la variable como undefined
(igual cuando se crea la función: function a() {}
).
El operador de asignación (es decir, el signo igual) (1) asigna el operando del lado derecho (es decir, un valor o el valor de una variable, propiedad o función) al operando del lado izquierdo (es decir, variable o propiedad ) y luego (2) la expresión de asignación (por ejemplo, y = 10) se convierte en un operando simple con el mismo valor que su operando del lado derecho (por ejemplo, 10) antes de que se evalúe el resto de la expresión. Esto es similar a cuando una función llamada se reemplaza con su valor de retorno cuando se evalúa una expresión (aunque las llamadas de función son las primeras en el orden de las operaciones y las operaciones de asignación son catorce):
var x, y, z = 1;
x = z + (y = 2); // x === 3
function returnTwo () {
return 2;
}
x = z + returnTwo(); // x === 3
Tenga en cuenta que no solo x ahora es igual a 3, sino que toda la expresión se evalúa como 3.
El propósito de la palabra clave var
es vincular las variables al alcance actual. Las variables declaradas con la palabra clave var
están vinculadas al ámbito donde se declaran. La palabra clave var
asigna la variable más a la izquierda (o propiedad) como referencia al valor de la expresión evaluada:
var fun = function () {
var x = 1;
var y = x + 1;
return y;
}
// The x and y variables are bound to the scope of the fun function.
El uso de la palabra clave var
con una expresión se denomina declaración. Las declaraciones son acciones que no se evalúan como un valor, ni siquiera indefinidas (aunque su consola esté imprimiendo indefinidamente). Además, las declaraciones no pueden aparecer donde JavaScript espera una expresión, como han mostrado otras respuestas a esta publicación.
Eso es porque var x = 5;
Es una declaración variable, no una expresión.
El comportamiento de esta declaración se describe en la Sección 12.2 de la Referencia del lenguaje ECMAScript .
- Evaluar VariableDeclarationList.
- Regreso (normal, vacío, vacío).
Esto es básicamente un void
retorno void
.