¿ QUE ES UNA FUNCION EN JAVA-SCRIPT ?
Las funciones son uno de los pilares fundamentales en JavaScript. Una función es un procedimiento en JavaScript—un conjunto de sentencias que realizan una tarea o calculan un valor. Para usar una función, debe definirla en algún lugar del ámbito desde el cual desea llamarla.
Declaraciones de función
La definición de una función (también llamada declaración de función o sentencia de función) consiste de la palabra clave (reservada) function
, seguida por:
- El nombre de la función (opcional).
- Una lista de argumentos para la función, encerrados entre paréntesis y separados por comas (,).
- Las sentencias JavaScript que definen la función, encerradas por llaves,
{ }
.
Por ejemplo, el siguiente código define una función simple llamada square
:
function square(number) {
return number * number;
}
function
, seguida por:{ }
.square
:function square(number) {
return number * number;
}
¿ CUALES SON LAS PARTES DE UNA FUNCION ?
¿ TIPOS DE FUNCIONES EN JAVA-SCRIPT ?
FUNCIONES OBJETO
Las funciones en Javascript son objetos. Las funciones son objetos enlazados con
Function.prototype
(que a su vez enlaza con Object.prototype
), que incluyen dos propiedades ocultas: el contexto de la función y el código que implementa su comportamiento.
Toda función en JavaScript es creada con una propiedad
protoype
. Su valor es un objeto con una propiedad constructorcuyo valor es la propia función. Esto es diferente al enlace oculto a Function.prototype
. Veremos el significado de esta complicada construcción más adelante. Como las funciones son objetos, pueden ser utilizadas como cualquier otro valor. Pueden ser almacenadas en variables, objetos o arrays. Pueden ser pasadas como argumentos a otras funciones, y pueden ser retornadas por otras funciones. Además, al ser objetos, también pueden tener métodos. Lo que las hace realmente especiales es que pueden ser llamadas.
ARGUMENTOS Y VALORES DE RETORNO
Las funciones más sencillas no necesitan ninguna información para producir sus resultados, aunque lo normal es que necesiten de datos para producir resultados. Las variables que necesitan las funciones se llaman argumentos. Antes de que pueda utilizarlos, la función debe indicar cuántos argumentos necesita y cuál es el nombre de cada argumento. Además, al llamar a la función, se deben incluir los valores (o expresiones) que se le van a pasar a la función. Los argumentos se indican dentro de los paréntesis que van detrás del nombre de la función y se separan con una coma (
,
).
FUNCIONES ANÓNIMAS AUTOEJECUTABLES
Un patrón común en JavaScript son las funciones anónimas autoejecutables. Este patrón consiste en crear una expresión de función e inmediatamente ejecutarla.
(function(){
var foo = 'Hola mundo';
})();
console.log(foo); // indefinido (undefined)
FUNCIONES COMO ARGUMENTOS
En JavaScript, las funciones pueden ser asignadas a variables o pasadas a otras funciones como argumentos. En frameworks como jQuery por ejemplo, pasar funciones como argumentos es una práctica muy común.
var myFn = function(fn) {
var result = fn();
console.log(result);
};
myFn(function() { return 'hola mundo'; }); // muestra en la consola 'hola mundo'
var myOtherFn = function() {
return 'hola mundo';
};
myFn(myOtherFn);
FUNCIONES DE CIERRE
La buena noticia sobre la visibilidad, es que las funciones internas pueden tener acceso a los parámetros y variables de las funciones donde han sido definidas (con la excepción de
this
y arguments
). Antes hemos definido un objeto que tenía una propieda value
y un método increment
. Supongamos que queremos proteger ese valor cambios no autorizados. En lugar de inicializar ese objeto como un literal, vamos a inicializarlo llamando a una función que devuelva un objeto literal. Vamos a definir una variable value
y un objeto de retorno con los métodos increment
y getValue
:var myObject = (function () {var value = 0; return { increment: function (inc) { value += typeof inc === 'number' ? inc : 1; }, getValue: function () { return value; } }; }());
EJECUCIONES EN CASCADA
Algunos métodos no devuelven ningún tipo de dato, ya simplemente pueden modificar el estado de algún tipo de dato. Si hacemos que estos métodos devuelvan
this
en lugar de undefined
, podemos encadenar la ejecución de esos métodos en cascada. Las funciones en cascada pueden permitirnos escribir sentencias de este tipo:getElement('myBoxDiv').move(350, 150).width(100).height(100).color('red').border('10px outset').padding('4px').appendText("Please stand by").on('mousedown', function (m) {this.startDrag(m, this.getNinth(m));}).on('mousemove', 'drag').on('mouseup', 'stopDrag').tip('This box is resizeable');
¿ QUE ES UN PARAMETRO ?
En JavaScript, los parámetros de funciones son por defecto
undefined
. De todos modos, en algunas situaciones puede ser útil colocar un valor por defecto diferente. Aquí es donde los parámetros por defecto pueden ayudar.
En el pasado, la estrategia general para colocar valores por defecto era probar los valores de los parámetros en el cuerpo de la función y asignarles un valor si eran
undefined
. Si en el siguiente ejemplo no se proveyera un valor para b
en la llamada, su valor sería undefined
cuando se evalúe a*b
y la llamada a multiplicar
hubiera retornado NaN
. De todos modos, esto es capturado en la segunda línea de este ejemplo:function multiplicar(a, b) {
b = typeof b !== 'undefined' ? b : 1;
return a*b;
}
multiplicar(5); // 5
¿ FUNCIONES PREDETERMINADAS EN JAVA-SCRIPT ?
La función eval
La función eval tiene como argumento una expresión y devuelve el valor de la misma. Esta función resulta útil para evaluar una cadena de caracteres que representa una expresión numérica. La edición efectuada mediante un campo de formulario es una cadena de caracteres que a veces es necesario convertir en valor numérico. El código siguiente ilustra este ejemplo permitiendo al usuario introducir una expreción numérica y visualiza a continuación el valor de la expresión.
Funciones escape y unescape
Estas dos funciones permiten codificar cadenas de caracteres en formato URL (ISO Latin 1). Esta codificación es necesaria en la creación automática de enlaces de hipertexto o en la definición de propiedades persistentes como los Cookies.
Ejemplo:
escape("He aquí")="He%20aquí"
unescape("He%20aquí")="He aquí"
unescape("%23"); // devuelve #
escape("#"); // devuelve %23
Función parseFloat
Convierte un string a un número en punto flotante. Si se encuentra otros caracteres que no sean números, el signo '+', el '-' o un exponente, devuelve el valor encontrado hasta ese punto. Del mismo modo, si el primer caracter no se puede convertir a número devolverá cero.
La función isNaN
Comprueba si el valor pasado por parámetros es númerico o no. El resultado de esta función es un booleano. Es decir, evalúa un argumento para ver si es NaN: Not Number.
isNaN(valor de entrada)
La función parseInt
Convierte una cadena de caracteres de entrada a un número entero con una base especificada. La base puede ser 8, 10 ó 16. Si se encuentra otros caracteres que no sean números, el signo '+', el '-' o un exponente, devuelve el valor encontrado hasta ese punto. Del mismo modo, si el primer caracter no se puede convertir a número devolverá cero.
parseInt(ristra,base) //base es opcional.
¿ FUNCIONES ANIDADAS EN JAVA-SCRIPT ?
Las funciones son otro tipo de variable en JavaScript (con algunos matices, por supuesto). Crear una función dentro de otra función cambia el alcance de la función de la misma manera que cambiaría el alcance de una variable. Esto es especialmente importante para su uso con cierres para reducir la contaminación total del espacio de nombres global.
Las funciones definidas dentro de otra función no serán accesibles fuera de la función a menos que se hayan adjuntado a un objeto al que se pueda acceder fuera de la función:
function foo(doBar)
{function bar(){console.log( 'bar' );}function baz(){console.log( 'baz' );}window.baz = baz;if ( doBar ) bar();}