`var`: Variables declared with `var` are function-scoped, which means they are only accessible within the function where they are declared or in the global scope if declared outside of a function. However, `var` declarations are hoisted to the top of their scope, which means they can be accessed before they are declared. Also, `var` variables can be re-declared and updated within their scope.
`let`: Variables declared with `let` are block-scoped, which means they are only accessible within the block where they are declared (e.g., within a loop or if statement). Unlike `var`, `let` variables are not hoisted, which means they cannot be accessed before they are declared. Also, `let` variables can be updated within their scope, but not re-declared.
`const`: Variables declared with `const` are also block-scoped and cannot be re-declared or updated within their scope. However, `const` variables can still be mutable, which means you can modify the properties of objects or arrays assigned to a `const` variable. `const` variables are commonly used to declare constants or values that should not be changed.