> ## Documentation Index
> Fetch the complete documentation index at: https://docs.exoid.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Script

> Esegui JavaScript su un blocco per impostare una variabile, marcare un rispondente o preparare un valore.

Gli script servono a calcolare quello che le condizioni da sole non sanno esprimere: impostare una variabile combinando più risposte precedenti, marcare un rispondente che corrisponde a un profilo che ti interessa, preparare un valore che userà una domanda successiva o un webhook. Scrivi poche righe di JavaScript su un singolo blocco, e girano per ogni rispondente che ci passa.

Il pulsante **Script** sta nel pannello della domanda. Il modale che apre dice cosa fa: "Esegui JavaScript quando un nodo si apre o dopo che un rispondente invia una risposta".

## Le due schede

<Tabs>
  <Tab title="On enter">
    Gira **prima che il nodo venga mostrato**. La usi per preparare qualcosa che il rispondente sta per vedere o per impostare un valore che dipende dal percorso fatto fin lì.
  </Tab>

  <Tab title="After submit">
    Gira **dopo che il rispondente ha inviato la risposta** su questo blocco. La usi per trasformare in variabile la risposta appena data.
  </Tab>
</Tabs>

Ogni scheda ha il suo editor di codice e il suo script. Un blocco può averle entrambe, una sola o nessuna.

## Cosa può leggere e scrivere uno script

Dentro uno script hai a disposizione due oggetti.

<ParamField path="questions.<CODICE DOMANDA>.responseValue" type="lettura">
  La risposta data a una domanda, indirizzata tramite il suo codice domanda. È per questo che il codice domanda va scelto con criterio: è la maniglia che usano gli script.
</ParamField>

<ParamField path="vars.<nome>" type="scrittura">
  Una variabile della campagna. Le assegni un valore e quel valore resta con il rispondente per il resto dell'intervista.
</ParamField>

L'esempio precaricato nel prodotto li mostra entrambi in poche righe: legge due risposte e scrive una variabile quando almeno una delle due corrisponde.

```js theme={"dark"}
const shouldFlag = questions.Q1.responseValue === "option_1" || questions.Q2.responseValue === "yes";
if (shouldFlag) vars.flag = true;
```

<Warning>
  Il riferimento completo dell'API non è ancora pubblicato. Attieniti a `questions.<CODICE>.responseValue` in lettura e a `vars.<nome>` in scrittura: sono i due punti d'accesso documentati.
</Warning>

## Quick run

**Quick run** esegue lo script in uno stato isolato, senza salvare nulla. È il modo per verificare che il codice faccia quello che pensi prima che ci passi un rispondente vero. Quello che lanci così non tocca né i dati raccolti né le variabili di una sessione reale.

<Tip>
  Imposta i codici domanda prima di scrivere lo script. Rinominare un codice dopo rompe in silenzio tutti gli script che si riferivano al vecchio nome.
</Tip>

## Prossimi passi

<CardGroup cols={2}>
  <Card title="Variabili di contesto" icon="braces" href="/it/logica/variabili">
    Crea le variabili che gli script scrivono e riusale nei testi delle domande.
  </Card>

  <Card title="Logiche e condizioni" icon="git-branch" href="/it/logica/condizioni">
    Mostra o salta una domanda, e ramifica il flusso con le regole di navigazione.
  </Card>

  <Card title="Webhook" icon="webhook" href="/it/webhooks/introduzione">
    Manda ogni risposta, variabili comprese, al tuo endpoint appena arriva.
  </Card>
</CardGroup>


## Related topics

- [Opzioni dei blocchi](/it/builder/opzioni-blocchi.md)
- [Variabili di contesto](/it/logica/variabili.md)
- [Logiche e condizioni](/it/logica/condizioni.md)
