Funciones vs Métodos

Clase 21 de 80Curso de JavaScript Desde Cero

Contenido del curso

Primeros Pasos

Funciones y This

Resumen

Las funciones en JavaScript son mucho más que simples bloques de código reutilizable. Aunque un typeof sobre una función devuelve "function", las funciones siguen siendo objetos. Esto significa que comparten capacidades con cualquier otro objeto: tienen propiedades, métodos, un contexto de ejecución y pueden ser invocadas. Comprender esta naturaleza dual es fundamental para escribir código más flexible y profesional.

¿Qué capacidades comparten las funciones con otros objetos?

Las funciones en JavaScript pueden comportarse exactamente como otros objetos. Esto abre un abanico de posibilidades que todo desarrollador debe conocer, especialmente porque son temas frecuentes en entrevistas técnicas.

¿Qué es un callback y cómo se pasa una función como argumento?

Un callback es una función que se pasa como argumento a otra función [0:55]. Este patrón es extremadamente común en programación. Por ejemplo, si tienes una función A y otra función B, puedes pasar A como argumento al invocar B:

javascript function A() { // lógica }

function B(fn) { fn(); }

B(A);

De esta forma, B recibe a A y puede ejecutarla internamente. Este concepto es la base de operaciones asíncronas, manejo de eventos y muchas utilidades del lenguaje.

¿Cómo retornar una función desde otra función?

Otra capacidad poderosa es retornar funciones desde dentro de otras funciones [1:35]. Esto permite crear patrones como closures y fábricas de funciones:

javascript function A() { function B() { // lógica interna } return B; }

Aquí, la función A contiene a B y la retorna. Quien invoque A() recibirá la función B lista para ser ejecutada.

¿Qué diferencia hay entre una declaración de función y una expresión de función?

También es posible asignar funciones a variables [2:12]. Cuando lo hacemos, la función pierde su nombre propio y adopta el de la variable:

javascript const A = function() { // lógica };

Esta forma se conoce como expresión de función. A diferencia de la declaración de función, donde usamos la palabra clave function seguida de un nombre, en la expresión de función el identificador queda a cargo de la variable. Es una distinción clave a la hora de entender el hoisting y la organización del código.

¿Pueden las funciones tener propiedades, métodos y anidarse entre sí?

Las funciones no solo reciben y retornan valores. También pueden tener propiedades y métodos asociados [3:05]. Por ejemplo, el método .call() permite cambiar el contexto de ejecución de una función, vinculándola a un objeto específico:

javascript function A() { // lógica }

const obj = {}; A.call(obj);

El contexto de ejecución determina a qué se refiere this dentro de la función. Con .call(), le indicamos que this apunte al objeto que le pasamos.

¿Qué son las funciones anidadas o nested functions?

Anidar funciones significa colocar una función dentro de otra [3:35]. Esto permite crear estructuras donde las funciones internas acceden a las variables de las funciones externas:

javascript function A() { function B() { function C() { // puede acceder a variables de A y B } C(); } B(); }

A();

Desde C es posible acceder a propiedades de A, y desde B también. Esta característica es la base de los closures y permite encapsular lógica de forma muy elegante.

¿Es posible almacenar funciones dentro de objetos?

La respuesta es [4:25]. Cuando una función vive dentro de un objeto, recibe el nombre de método. Veamos un ejemplo práctico con un objeto que representa un cohete:

javascript const rocket = { name: "FalconNine", launchMessage: function() { console.log("🔥"); } };

rocket.launchMessage();

Al ejecutar rocket.launchMessage(), se muestra el emoji de fuego en consola [5:40]. La propiedad launchMessage no almacena un valor simple, sino una función completa que puede ser invocada con la notación de punto.

  • Un método es una función almacenada como propiedad de un objeto.
  • Se invoca usando objeto.metodo().
  • Permite asociar comportamiento directamente a los datos.

Esta relación entre funciones y objetos es uno de los pilares de JavaScript. Saber que las funciones pueden pasarse como argumentos, retornarse, asignarse a variables, anidarse y almacenarse en objetos te da herramientas para escribir código más expresivo y modular. ¿Ya conocías todas estas capacidades? Comparte en los comentarios cuál te resultó más sorprendente.