JavaScript variables can be declared using var, let, or const, with differences in scope, hoisting, reassignment, and more.
1. Scope: var is function-scoped, while let and const are block-scoped.
2. Hoisting: var is hoisted and initialized, while let and const are hoisted but not initialized.
3. Redeclaration & Reassignment: var allows both redeclaration and reassignment, let allows reassignment but not redeclaration, and const allows neither.
4. Temporal Dead Zone (TDZ): Variables declared with let and const have a Temporal Dead Zone where they cannot be accessed before declaration.