1.4 Proměnné: var, let, const
Výuka
V JavaScriptu máme 3 způsoby deklarace proměnných:
| Keyword | Scope | Re-assign | Hoisting | Použití |
|---|---|---|---|---|
var |
Funkce | ✅ Ano | ✅ Ano | ⚠️ Legacy (nepoužívat) |
let |
Blok | ✅ Ano | ❌ TDZ | ✅ Proměnná hodnota |
const |
Blok | ❌ Ne | ❌ TDZ | ✅ Konstantní reference |
Klíčové koncepty
Scope (rozsah):
var- platí v celé funkci (function scope)let/const- platí jen v bloku{}(block scope)
Hoisting (povýšení):
var- deklarace se "vytáhne" nahoru, inicializace zůstanelet/const- temporal dead zone (TDZ) - nelze použít před deklarací
Re-assignment (přepsání):
const- nelze přepsat referenci (ale obsah objektu/pole lze měnit!)
JavaScript
// var - funkční scope, hoisting
var legacy = 1;
function test() {
var x = 10;
if (true) {
var x = 20; // ⚠️ Přepíše x z funkce!
}
console.log(x); // 20
}
// let - blokový scope
let counter = 0;
if (true) {
let counter = 10; // ✅ Jiná proměnná
console.log(counter); // 10
}
console.log(counter); // 0
// const - nelze přepsat referenci
const PI = 3.14159;
// PI = 3.14; // ❌ Error: Assignment to constant
// Ale obsah objektu/pole lze měnit!
const user = { name: 'Jan' };
user.name = 'Petr'; // ✅ OK
user.age = 25; // ✅ OK
// user = {}; // ❌ Error
const arr = [1, 2, 3];
arr.push(4); // ✅ OK
// arr = []; // ❌ Error
TypeScript
// V TS stejně používáš let/const, ale s typovými anotacemi
var legacy: number = 1; // ⚠️ Nepoužívat
let counter: number = 0; // ✅ Proměnná
const PI: number = 3.14159; // ✅ Konstanta
// TS často odvodí typ sám (inference)
let count = 0; // number (odvozeno)
const name = 'Jan'; // 'Jan' (literal type)
// Explicitní typování
let age: number;
age = 25; // ✅ OK
// age = '25'; // ❌ Error
// Const s objekty
const user: { name: string; age: number } = {
name: 'Jan',
age: 25
};
user.age = 26; // ✅ OK (property lze měnit)
// user = {}; // ❌ Error (referenci nelze změnit)
Rozdíl JS vs TS
JavaScript:
- Typy se kontrolují za běhu
- Proměnná může měnit typ:
let x = 5; x = 'hi';✅
TypeScript:
- Typy se deklarují a kontrolují při kompilaci
- Proměnná má pevný typ:
let x: number = 5; x = 'hi';❌
Stejné v obou:
var/let/constfungují stejně- Scope pravidla jsou identická
- Hoisting a TDZ fungují stejně
Tip
💡 Best practices:
// ❌ Špatně
var data = []; // Nepoužívej var
// ✅ Dobře
const data = []; // Default: použij const
let counter = 0; // Jen když potřebuješ měnit hodnotu
💡 Temporal Dead Zone (TDZ):
console.log(x); // ❌ ReferenceError
let x = 5;
// vs.
console.log(y); // undefined (hoisting)
var y = 5;
💡 Const neznamená immutable:
const obj = { a: 1 };
obj.a = 2; // ✅ OK - měníš property
obj.b = 3; // ✅ OK - přidáváš property
// obj = { a: 2 }; // ❌ Error - měníš referenci
Kvíz
Které výroky jsou pravdivé?
❌ - const zabraňuje přepsání reference, ale obsah objektu/pole lze měnit
✅ - let platí jen v bloku {}, kde je deklarovaná
✅ - var platí v celé funkci (proto ji nepoužíváme)
❌ - TS často odvodí typ sám (type inference): const x = 5 → number
🎯 Závěrečný projekt
Po dokončení všech 8 dílů vytvoříte jednoduchou Todо aplikaci v čistém JavaScriptu. Naučíte se, jak aplikovat vše, co jste se naučili, na reálný projekt.
Zobrazit podrobnosti projektu →Informace o seriálu
Obtížnost
Délka
Cca 480 minut
Počet videí
8 videí + projekty
Certifikát
Po dokončení obdržíte certifikát
Lekce v této sekci
- 1.1 Úvod do JavaScriptu a TypeScriptu
- 1.2 Nastavení prostředí
- 1.3 První program
- 1.4 Proměnné: var, let, const
- 1.5 Datové typy - přehled
- 1.6 String (řetězce)
- 1.7 Number (čísla)
- 1.8 Boolean (pravda/nepravda)
- 1.9 Null a Undefined
- 1.10 Type Inference vs Annotations
- 1.11 Aritmetické operátory
- 1.12 Porovnávací operátory
- 1.13 Logické operátory
- 1.14 Komentáře
- 1.15 Console metody
Struktura lekcí (souborový strom)
- 1.1 Úvod do JavaScriptu a TypeScriptu
- 1.2 Nastavení prostředí
- 1.3 První program
- 1.4 Proměnné: var, let, const
- 1.5 Datové typy - přehled
- 1.6 String (řetězce)
- 1.7 Number (čísla)
- 1.8 Boolean (pravda/nepravda)
- 1.9 Null a Undefined
- 1.10 Type Inference vs Annotations
- 1.11 Aritmetické operátory
- 1.12 Porovnávací operátory
- 1.13 Logické operátory
- 1.14 Komentáře
- 1.15 Console metody
- 03.01 Deklarace funkce
- 03.02 Function Expression
- 03.03 Arrow Functions
- 03.04 Parametry a argumenty
- 03.05 Return hodnoty
- 03.06 Výchozí parametry
- 03.07 Rest parametry
- 03.08 Co je Scope
- 03.09 Lexikální Scope
- 03.10 Řetězec Scope
- 03.11 Globální Scope
- 03.12 Životní Cyklus Proměnných
- 03.13 Omezení Scope
- 03.14 Použití Closures
- 03.15 Callback funkce
- 03.16 Higher-order Functions
- 03.17 IIFE
- 03.18 Void funkce
- 03.19 Rekurze
- v přípravě
- v přípravě
- v přípravě
- v přípravě
- 01 — Co je Next.js
- 02 — Vytvoření projektu
- 03 — Struktura projektu (app/)
- 04 — Page komponenty (page.js / page.tsx)
- 05 — Layout komponenty (layout.js / layout.tsx)
- 06 — File-based routing
- 07 — Dynamické routy ([id]/page.js)
- 08 — Link komponenta (navigace)
- 09 — Image komponenta (next/image)
- 10 — Metadata (title, description, Open Graph)
- 11 — Loading UI (loading.js / loading.tsx)
- 12 — Error handling (error.js / error.tsx)
- 13 — Not Found (not-found.js / not-found.tsx)
- v přípravě
- v přípravě
- v přípravě