Función()

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ámetros

los 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 metodos

El objeto de función tiene las siguientes propiedades (sin incluir propiedades y métodos heredados):

Propiedades (Function.prototype;):

  • prototipo

Funciones y métodos de la instancia de objeto de función

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()

Las funciones siempre devuelven un valor

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.


Las funciones son ciudadanos de primera clase (no solo la sintaxis, sino los valores)

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.


Pasando parámetros a una función

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 funciones

Dentro 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

 

los argument.callee Propiedad

los 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.


La instancia de la función 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).


Redefiniendo los parámetros de la función

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.


Devolver una función antes de que se haga (cancelar la ejecución de la función)

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..


Definición de una función (declaración, expresión o constructor)

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).


Invocar una función (función, método, constructor o llamada() y aplicar())

Las funciones se invocan utilizando cuatro escenarios o patrones diferentes.

  • Como una función
  • Como metodo
  • Como constructor
  • Utilizando 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.


Funciones anonimas

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

 

Expresión de la función de auto-invocación

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

 

Declaraciones anónimas de función de auto-invocación

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 pueden ser anidadas

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.


Pasar funciones a funciones y devolver funciones de funciones

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..


Invocar declaraciones de funciones antes de que se definan (también conocido como función de elevación)

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.


Una función puede llamarse a sí misma (también conocida como recursión)

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.


Conclusión

Las funciones son uno de los aspectos más utilizados de JavaScript. Esperamos que ahora tenga una mejor comprensión de cómo usarlas..