alex4answ
@alex4answ

Почему функция не замыкается?

Не могу понять, почему не замыкается функция?
https://jsfiddle.net/wvLzhxe4/
let x = 1;

function createSum(){
	return function(){
  	return x + 5;
  }
}

function foo(){
  let x = 5;
  return createSum()();
}

function bar(){
  let x = 50;
  return createSum()();
}

console.log(foo()); // 6
console.log(bar()); // 6


почему в bar не 55, ведь createSum должен брать переменную x из внешнего лекс окружения, но берет из глобального, почему?
  • Вопрос задан
  • 157 просмотров
Решения вопроса 1
Kozack
@Kozack Куратор тега JavaScript
Thinking about a11y
Функция берет значения из контекста в котором она объявлена а не в котором она вызвана.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
let x = 1;

function createSum(x){
  return x + 5;
}

function foo(){
  let x = 5;
  return createSum(x);
}

function bar(){
  let x = 50;
  return createSum(x);
}

console.log(foo());
console.log(bar());
Ответ написан
Mesuti
@Mesuti
Потому что в createSum() не отправляется X.
Эта функция берет X из глобального окружения.

Например, можно убрать повторные инициализации X и будет обновляться глобальный X
let x = 1;

function createSum(){
	return function(){
  	return x + 5;
  }
}

function foo(){
	x = 5;  // del let
  return createSum()();
}

function bar(){
	x = 50;   // del let
  return createSum()();
}

console.log(foo());
console.log(bar());
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы