JavaScript
Легкий
Какие области видимости существуют в JavaScript?
Области видимости в JavaScript
1. Global Scope
var globalVar = "I'm global";
let globalLet = "Also global";
function test() {
console.log(globalVar); // Доступно
}
// В браузере: window.globalVar
2. Function Scope
function example() {
var functionScoped = "Only here";
console.log(functionScoped); // OK
}
console.log(functionScoped); // ReferenceError
3. Block Scope (let, const)
if (true) {
let blockLet = "block";
const blockConst = "also block";
var notBlock = "function scope!";
}
console.log(notBlock); // OK — var не имеет block scope
console.log(blockLet); // ReferenceError
console.log(blockConst); // ReferenceError
4. Module Scope
// module.js
const privateVar = "not exported";
export const publicVar = "exported";
// other.js
import { publicVar } from './module.js';
// privateVar недоступна
Lexical Scope (Замыкание):
function outer() {
const outerVar = "outer";
function inner() {
console.log(outerVar); // Доступно!
}
return inner;
}
const fn = outer();
fn(); // "outer" — замыкание сохраняет доступ
var vs let vs const:
| Особенность | var | let | const |
|---|---|---|---|
| Scope | Function | Block | Block |
| Hoisting | Да (undefined) | Да (TDZ) | Да (TDZ) |
| Переприсваивание | Да | Да | Нет |
| Повторное объявление | Да | Нет | Нет |
Temporal Dead Zone (TDZ):
console.log(x); // undefined (hoisting)
var x = 1;
console.log(y); // ReferenceError (TDZ)
let y = 2;
Hoisting:
// var поднимается с undefined
console.log(a); // undefined
var a = 5;
// function поднимается полностью
hello(); // "Hello!"
function hello() { console.log("Hello!"); }
// let/const в TDZ до объявления
Похожие вопросы
Готовитесь к собеседованию?
ENIGMA AI — невидимый ИИ-помощник для технических интервью
Попробовать бесплатно