# 1.10 Funciones

El empleado de la tienda de teléfonos probablemente no lleva consigo una calculadora para calcular los impuestos y la cantidad final de la compra. Esa es una tarea que necesita definir una vez y reutilizar una y otra vez. Las probabilidades son, que la empresa tenga un registro de pago (computadora, tableta, etc.) con esas "funciones" incorporadas.

Del mismo modo, su programa casi seguramente querrá dividir las tareas del código en piezas reutilizables, en lugar de repetir repetidamente repetidamente (juego de palabras!). La forma de hacerlo es definir una función.

Una función es generalmente una sección con el nombre del código que puede ser "llamada" por ese nombre, y el código dentro de ella se ejecutará cada vez que se llama. Considere:

```javascript
function printAmount() {
    console.log( amount.toFixed( 2 ) );
}

var amount = 99.99;

printAmount(); // "99.99"

amount = amount * 2;

printAmount(); // "199.98"
```

Opcionalmente, las funciones pueden tomar argumentos (también conocidos como parámetros), valores que se le "pasan". Además, también pueden devolver un valor.

```javascript
function printAmount(amt) {
    console.log( amt.toFixed( 2 ) );
}

function formatAmount() {
    return "$" + amount.toFixed( 2 );
}

var amount = 99.99;

printAmount( amount * 2 );        // "199.98"

amount = formatAmount();
console.log( amount );            // "$99.99"
```

La función `printAmount(..)` toma un parámetro que llamamos `amt`. La función `formatAmount()` devuelve un valor. Por supuesto, también puedes combinar esas dos técnicas en la misma función.

Las funciones se usan a menudo para el código que se planea llamar varias veces, pero también pueden ser útiles sólo para organizar fragmentos de código relacionados en las colecciones con nombre, incluso si sólo planea llamarlas una vez.

Considere:

```javascript
const TAX_RATE = 0.08;

function calculateFinalPurchaseAmount(amt) {
    // calculate the new amount with the tax
    amt = amt + (amt * TAX_RATE);

    // return the new amount
    return amt;
}

var amount = 99.99;

amount = calculateFinalPurchaseAmount( amount );

console.log( amount.toFixed( 2 ) );        // "107.99"
```

Aunque `calculateFinalPurchaseAmount(..)` sólo se llama una vez, organizar su comportamiento en una función denominada separadamente hace que el código que utiliza su lógica (la declaración `amount = calculateFinal...` ) más limpia. Si la función tenía más declaraciones en ella, los beneficios serían aún más pronunciados.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://daniel-morales.gitbook.io/javascript-avanzado-en-espanol/chapter1/1-capitulo-1-en-la-programacion/110-funciones.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
