Кроме функций, в каких других случаях происходит создание лексического окружения?

В чем разница между лексическим окружением, создаваемым функциями и фигурными скобками ({}), и могут ли функции, кроме стрелочных функций, получать значение `this`, которое не будет ссылаться на объект `window`?
  • 11 октября 2023 г. 18:09
Ответы на вопрос 1
Помимо функций, лексическое окружение также создается при создании блоков кода, таких как блоки фигурных скобок `{}` внутри функций, условных операторов `if`, циклов `for`, а также блоков модулей `import` и `export`.

Разница между лексическим окружением, создаваемым функциями и фигурными скобками, состоит в том, что лексическое окружение функции сохраняет состояние переменных и параметров функции, а также имеет доступ к контексту выполнения функции, включая значение `this`. Лексическое окружение фигурных скобок, с другой стороны, не сохраняет состояние и доступ к контексту выполнения функции, а используется для создания временной области видимости переменных внутри блока кода.

Относительно значения `this`, обычные функции могут получить значение `this`, отличное от объекта `window`, когда они вызываются в контексте другого объекта или через методы объекта. В этих случаях значение `this` ссылается на контекст объекта, в котором функция была вызвана. Например:

```javascript
const obj = {
  name: 'John',
  sayHello: function() {
    console.log('Hello, ' + this.name);
  }
};

obj.sayHello(); // Вывод: Hello, John
```

Стрелочные функции, однако, не создают собственного значения `this` и всегда наследуют его из контекста окружения, в котором они были созданы. Это значит, что у стрелочных функций нет возможности получить значение `this`, которое отличается от значения во внешнем окружении, включая `window`.
Похожие вопросы