Introducció a JavaScript: Variables, Scope i Hoisting
JavaScript és un llenguatge de programació lleuger, interpretat i orientat a objectes que s'executa en entorns de client (navegadors) i servidor (Node.js). Creat per Brendan Eich el 1995 en només 10 dies, inicialment es deia Mocha, després LiveScript, i finalment es va consolidar com a JavaScript per motius comercials.
Evolució històrica del llenguatge
- 1995: Creació de JavaScript a Netscape.
- 1996–1999: Estàndard ECMAScript publicat per ECMA.
- 2009: Naixement de Node.js (JavaScript al servidor).
- 2015 (ES6): Introducció de
let
,const
, arrow functions, classes, modules... - 2024: JS continua essent essencial en el desenvolupament web modern.
Declaració de variables
var
(clàssic)
var nom = "Joan";
var nom = "Marc"; // redeclaració permesa
- Declaració amb àmbit de funció
- Reassignable i redeclarable
- Afectat pel hoisting: es defineix com a
undefined
al principi del context
let
(modern)
let edat = 30;
edat = 31; // reassignació OK
let edat = 40; // ❌ Error: redeclaració no permesa
- Scope de bloc
- Només es pot declarar una vegada dins del mateix bloc
const
(valor constant)
const PI = 3.14;
PI = 3.1416; // ❌ Error
- Scope de bloc
- No es pot reassignar
- Obligatori assignar valor en el moment de declaració
Hoisting
El hoisting és el comportament pel qual JS "puja" les declaracions a la part superior del seu context (funció o script), però només les declaracions, no les assignacions.
console.log(nom); // undefined
var nom = "Joan";
Amb let
o const
:
console.log(nom); // ❌ ReferenceError
let nom = "Joan";
Aquest error passa perquè les variables es col·loquen en un "Temporal Dead Zone (TDZ)" fins que s’inicialitzen.
Scope: àmbits de visibilitat
Global Scope
var global = "visible a tot arreu";
Function Scope
function suma() {
var resultat = 2 + 2;
}
Block Scope
if (true) {
let missatge = "Hola!";
}
Comparativa ràpida
Característica | var | let | const |
---|---|---|---|
Scope | funció | bloc | bloc |
Reassignació | ✅ | ✅ | ❌ |
Redeclaració | ✅ | ❌ | ❌ |
Hoisting | ✅ (undefined) | ❌ (Error) | ❌ (Error) |
Errors habituals
- Accedir a variables abans de declarar-les
- Redeclarar amb
let
oconst
- Reassignar una
const
- Malentendre el hoisting de funcions vs variables
Activitats
Activitat 1: Exploració de var
, let
, const
Prova els següents casos i analitza el comportament:
var a = 1;
let b = 2;
const c = 3;
a = 10; // OK
b = 20; // OK
c = 30; // ❌
var a = 100; // OK
let b = 200; // ❌
Activitat 2: Hoisting
console.log(x); // ?
var x = 5;
console.log(y); // ?
let y = 10;
Activitat 3: Scope
function test() {
var dinsFuncio = "funció";
if (true) {
let dinsBloc = "bloc";
var tambeFuncio = "funció 2";
}
console.log(dinsFuncio); // ?
console.log(dinsBloc); // ?
console.log(tambeFuncio); // ?
}
Reforç visual
| Context | Declaració | Visibilitat |
|---------|------------|-------------|
| Global | var | Tota la pàgina o arxiu |
| Funció | var | Només dins la funció |
| Bloc | let/const | Només dins el bloc `{}`|
Aquest capítol et proporciona una base sòlida sobre variables, àmbits i comportament intern de JavaScript per evitar errors habituals i escriure codi robust.