Publicado el

Diferentes formas de ejecutar una función en JavaScript

Ejecutar Funciones JS

JavaScript provee varias formas de llamar a una función, las cuales son muy usadas por los frameworks. Les explico con un ejemplo:

var nombre = 'Pedro';

function funcHola (nombre)
{
	nombre = nombre || this.nombre;
	return 'Hola ' + nombre;
}

La llamada común:

console.log(funcHola(nombre)); //--> Hola Pedro

Pero existen otras dos formas de ejecutar una función, utilizando el método call o apply que provee las funciones en JavaScript (objeto función). Ejemplo:

//Llamada con el método call
console.log(funcHola.call(this, nombre));

//Llamada con el método apply
console.log(funcHola.apply(this, [nombre]));

Seguramente se preguntarán para que sirven estos dos métodos que provee las funciones en la vida real. Yo les contesto con una pregunta muy simple, ¿Cómo harías para ejecutar una función pasada por parámetro, en un ámbito (scope) específico?. Veamos un ejemplo:

function funcSaludar(saludo)
{
	console.log(saludo()); //--> Hola Pedro
	console.log(saludo("José")); //--> Hola José
	console.log(saludo.call({nombre:"Antonio"})); //--> Hola Antonio
	console.log(saludo.call({nombre:"Antonio"}, "José")); //--> Hola José
}

funcSaludar(funcHola);

Entonces usando call ó apply podemos controlar el ámbito de una función. Un ejemplo puntual de su uso, se puede ver en JQuery al crear un plugin:

//https://learn.jquery.com/plugins/basic-plugin-creation/
(function ( $ ) {
 
    $.fn.greenify = function() {
        this.css( "color", "green" );
        return this;
    };
 
}( jQuery ));