@dominus_augustus

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

При вызове метода then экземпляра объекта Promise и передаче методу then анонимной функции в качестве первого аргумента, на какое внешнее лексическое окружение будет ссылаться эта анонимная функция? Вопрос касается не только Promise, но и любой функции, создаваемой в аргументах другой функции.

Пример 1:

let p = Promise.resolve();
p.then(() => { /* Какой-то код */ } );


Пример 2:

function doSomething(func) {
  /* Какой-то код */
}

doSomething(function sayHello() { console.log("Hello") })


В первом примере, какое внешнее лексическое окружение у анонимной функции, созданной в аргументе метода then? Во втором примере, тот же самый вопрос, только в рамках аргумента функции doSomething.
  • Вопрос задан
  • 58 просмотров
Решения вопроса 1
Robur
@Robur
Знаю больше чем это необходимо
Какое внешнее лексическое окружение у анонимной функции, создаваемой при вызове другой функции в качестве ее аргумента?


такое же как у создаваемой в любых других условиях. например при `const x=() => {}` факт наличия вызова другой функции не играет никакой роли для привязки лексического окружения, в этом его смысл. так как функция стрелочная, this привяжется вместе со всем остальным контекстом.

Во втором примере у вас нет стрелочных функций, поэтому this никуда не привязывается и определяется контекстом вызова sayHello, остальные переменные, если они будут - привязываются по общему принципу замыканий - лексического контекста

const x=1
console.log(this) //некий объект A
doSomething( () => console.log(this, x))// this привязан, равен A, x привязан равен 1

doSomething(function () { console.log(this, x)}) //this не привязан значение зависит от кода doSomething, x все так же привязан, равен 1
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы