Una función es un contenedor de declaraciones de código que se pueden invocar usando los paréntesis ()
operador. Los parámetros se pueden pasar dentro de los paréntesis durante la invocación para que las declaraciones en la función puedan acceder a ciertos valores cuando se invoca la función.
En el siguiente código, creamos dos versiones de un añadir números
función objectone usando el nuevo
operador y otro usando el patrón literal más común. Ambos esperan dos parámetros. En cada caso, invocamos la función, pasando parámetros entre paréntesis. ()
operador.
Muestra: sample76.html
Se puede usar una función para devolver un valor, construir un objeto o como un mecanismo para ejecutar simplemente el código. JavaScript tiene varios usos para las funciones, pero en su forma más básica, una función es simplemente un ámbito único de sentencias ejecutables..
Función()
Parámetroslos Función()
El constructor toma un número indefinido de parámetros, pero el último parámetro esperado por el Función()
constructor es una cadena que contiene sentencias que comprenden el cuerpo de la función. Cualquier parámetro pasado al constructor antes del último estará disponible para la función que se está creando. También es posible enviar múltiples parámetros como una cadena separada por comas.
En el siguiente código, contraste el uso del Función()
Constructor con los patrones más comunes de creación de instancias de un objeto de función..
Muestra: sample77.html
Aprovechando directamente el Función()
el constructor no se recomienda o generalmente nunca se hace porque JavaScript usará eval ()
para analizar la cadena que contiene la lógica de funciones. Muchos consideran eval ()
para ser innecesario gastos generales. Si está en uso, una falla en el diseño del código es altamente posible.
Utilizando la Función()
constructor sin el nuevo
La palabra clave tiene el mismo efecto que usar solo el constructor para crear objetos de función (nueva función ('x', 'return x')
vs. función (('x', 'retorno x')
).
No se crea ningún cierre al invocar el Función()
constructor directamente.
Función()
Propiedades y metodosEl objeto de función tiene las siguientes propiedades (sin incluir propiedades y métodos heredados):
Propiedades (Function.prototype;
):
prototipo
Las instancias de objetos de función tienen las siguientes propiedades y métodos (sin incluir las propiedades y los métodos heredados):
Propiedades de instancia (var myFunction = function (x, y, z) ;
myFunction.length;
):
argumentos
constructor
longitud
Métodos de instancia (var myFunction = function (x, y, z) ;
myFunction.toString ();
):
aplicar()
llamada()
Encadenar()
Si bien es posible crear una función simplemente para ejecutar sentencias de código, también es muy común que una función devuelva un valor. En el siguiente ejemplo, estamos devolviendo una cadena desde el Di hola
función.
Muestra: sample78.html
Si una función no especifica un valor de retorno, indefinido
es regresado. En la siguiente muestra, llamamos al gañido
función que registra la cadena 'yelp' en la consola sin devolver explícitamente un valor.
Muestra: sample79.html
El concepto que se debe quitar aquí es que todas las funciones devuelven un valor, incluso si no proporciona explícitamente un valor para devolver. Si no especifica un valor para devolver, el valor devuelto es indefinido
.
En JavaScript, las funciones son objetos. Esto significa que una función se puede almacenar en una variable, matriz u objeto. Además, una función se puede pasar y devolver desde una función. Una función tiene propiedades porque es un objeto. Todos estos factores hacen que las funciones sean ciudadanos de primera clase en JavaScript..
Muestra: sample80.html
Es crucial que te des cuenta de que una función es un objeto y, por lo tanto, un valor. Se puede pasar o aumentar como cualquier otra expresión en JavaScript.
Los parámetros son vehículos para pasar valores al alcance de una función cuando se invoca. En el siguiente ejemplo invocamos. addFunction ()
. Como lo hemos predefinido para tomar dos parámetros, dos valores agregados estarán disponibles dentro de su alcance.
Muestra: sample81.html
A diferencia de otros lenguajes de programación, es perfectamente legal en JavaScript omitir parámetros, incluso si la función se ha definido para aceptar estos argumentos. Los parámetros que faltan se dan simplemente el valor indefinido
. Por supuesto, al omitir valores para los parámetros, la función podría no funcionar correctamente.
Si pasa parámetros inesperados de una función (aquellos no definidos cuando se creó la función), no se producirá ningún error. Y es posible acceder a estos parámetros desde la argumentos
Objeto, que está disponible para todas las funciones..
esta
y argumentos
Los valores están disponibles para todas las funcionesDentro del ámbito y cuerpo de todas las funciones, el esta
y argumentos
los valores están disponibles.
los argumentos
objeto es un objeto similar a una matriz que contiene todos los parámetros que se pasan a la función. En el siguiente código, aunque renunciamos a especificar parámetros al definir la función, podemos confiar en la argumentos
La matriz se pasa a la función para acceder a los parámetros si se envían tras la invocación.
Muestra: sample82.html
los esta
palabra clave, pasada a todas las funciones, es una referencia al objeto que contiene la función. Como es de esperar, las funciones contenidas en objetos como propiedades (métodos) pueden usar esta
para obtener una referencia al objeto padre. Cuando se define una función en el ámbito global, el valor de esta
Es el objeto global. Revise el siguiente código y asegúrese de entender qué esta
está regresando.
Muestra: sample83.html
argument.callee
Propiedadlos argumentos
objeto tiene una propiedad llamada el llamado
, que es una referencia a la función que se está ejecutando actualmente. Esta propiedad se puede utilizar para hacer referencia a la función desde dentro del alcance de la función (argument.callee
) una auto-referencia. En el siguiente código, usamos esta propiedad para obtener una referencia a la función de llamada.
Muestra: sample84.html
Esto puede ser útil cuando una función necesita ser llamada recursivamente.
longitud
Propiedad y argumentos.longitud
los argumentos
objeto tiene un único longitud
propiedad. Si bien podría pensar que esta propiedad de longitud le dará el número de argumentos definidos, en realidad da el número de parámetros enviados a la función durante la invocación.
Muestra: sample85.html
Utilizando la longitud
propiedad de todos Función()
En ocasiones, podemos tomar el número total de parámetros que la función espera..
Muestra: sample86.html
los argumentos.longitud
La propiedad quedó obsoleta en JavaScript 1.4, pero se puede acceder al número de argumentos enviados a una función desde la longitud
Propiedad del objeto de función. Avanzando, puede obtener el valor de longitud aprovechando el el llamado
propiedad para obtener la primera referencia a la función que se invoca (argument.callee.length
).
Los parámetros de una función se pueden redefinir dentro de la función directamente o mediante el uso de argumentos
formación. Echa un vistazo a este código:
Muestra: sample87.html
Observe que puedo redefinir el valor del parámetro de la barra usando la argumentos
índice o reasignando directamente un nuevo valor al parámetro.
Las funciones se pueden cancelar en cualquier momento durante la invocación utilizando el regreso
palabra clave con o sin un valor. En la siguiente muestra, estamos cancelando la añadir
Funciona si los parámetros no están definidos o no son un número.
Muestra: sample88.html
El concepto que debe quitarse aquí es que puede cancelar la ejecución de una función utilizando el regreso
Palabra clave en cualquier punto de la ejecución de la función..
Una función se puede definir de tres maneras diferentes: un constructor de función, una declaración de función o una expresión de función. En el siguiente ejemplo, demuestro cada variación..
Muestra: sample89.html
Algunos han dicho que existe un cuarto tipo de definición para funciones, denominada "expresión de función denominada". Una expresión de función nombrada es simplemente una expresión de función que también contiene un nombre (por ejemplo,., var add = función add (x, y) return x + y
).
llamada()
y aplicar()
)Las funciones se invocan utilizando cuatro escenarios o patrones diferentes.
aplicar()
o llamada()
En el siguiente ejemplo, examinamos cada uno de estos patrones de invocación..
Muestra: sample90.html
Asegúrate de conocer los cuatro patrones de invocación, ya que el código que encontrarás puede contener cualquiera de ellos.
Una función anónima es una función a la que no se le asigna un identificador. Las funciones anónimas se usan principalmente para pasar funciones como un parámetro a otra función.
Muestra: sample91.html
Una expresión de función (en realidad, cualquier función excepto una creada a partir del Función()
constructor) puede invocarse inmediatamente después de la definición utilizando el operador de paréntesis. En la siguiente muestra, creamos un di algo()
Expresión de función y luego invocar inmediatamente la función. Esto se considera una función auto-invocadora..
Muestra: sample92.html
Es posible crear una declaración de función anónima que sea autoinvocada. Esto se llama una función anónima de auto-invocación. En el siguiente ejemplo, creamos varias funciones anónimas que se invocan inmediatamente.
Muestra: sample93.html
De acuerdo con el estándar ECMAScript, los paréntesis alrededor de la función (o cualquier cosa que transforme la función en una expresión) son necesarios si la función se invoca inmediatamente.
Las funciones se pueden anidar dentro de otras funciones de forma indefinida. En el siguiente ejemplo de código, encapsulamos cosa muy pegajosa
función dentro de la bar
función, que está dentro de la foo
función.
Muestra: sample94.html
El concepto simple aquí es que las funciones se pueden anidar y no hay límite a la profundidad de la anidación..
Recuerde, el valor de esta
para funciones anidadas será el objeto cabeza (el ventana
objeto en un navegador web) en JavaScript 1.5, ECMA-262, Edición 3.
Como se mencionó anteriormente, las funciones son ciudadanos de primera clase en JavaScript. Y como una función es un valor, y una función se puede pasar a cualquier tipo de valor, una función se puede pasar a una función. Las funciones que toman y / o devuelven otras funciones a veces se llaman "funciones de orden superior".
En el siguiente código, estamos pasando una función anónima a la foo
función que luego regresamos inmediatamente de la foo
función. Es esta función anónima que la variable bar
señala, desde foo
Acepta y luego devuelve la función anónima..
Muestra: sample95.html
Así que cuando bar
se invoca, invoca la función anónima que se pasó a la foo ()
función, que luego se pasa de nuevo desde el foo ()
función y referenciado desde el bar
variable. Todo esto es para mostrar el hecho de que las funciones se pueden pasar como cualquier otro valor..
Se puede invocar una instrucción de función durante la ejecución antes de su definición real. Esto es un poco extraño, pero debes tenerlo en cuenta para poder aprovecharlo, o al menos saber qué sucede cuando lo encuentras. En el siguiente ejemplo, invoco el diYo ()
y suma()
Declaraciones de función antes de que se definan.
Muestra: sample96.html
Esto sucede porque antes de que se ejecute el código, las instrucciones de función se interpretan y se agregan a la pila de ejecución / contexto. Asegúrate de que estás al tanto de esto cuando uses sentencias de funciones..
Las funciones definidas como expresiones de funciones no se elevan. Solo las declaraciones de funciones son izadas.
Es perfectamente legítimo que una función se llame a sí misma. De hecho, esto se usa a menudo en patrones de codificación bien conocidos. En el siguiente código, iniciamos el countDownFrom
función, que luego se llama a sí misma a través del nombre de la función countDownFrom
. Esencialmente, esto crea un bucle que cuenta atrás de 5 a 0.
Muestra: sample97.html
Debe tener en cuenta que es natural que una función se invoque a sí misma (también conocida como recursión) o que lo haga de forma repetitiva.
Las funciones son uno de los aspectos más utilizados de JavaScript. Esperamos que ahora tenga una mejor comprensión de cómo usarlas..