Почему ограниченная функция fBounded = f.bind () имеет ту же ссылку [[Environment]], что и исходная функция f? - PullRequest
0 голосов
/ 04 января 2019

Несмотря на то, что ограниченная функция g является совершенно новой функцией (обновление: похожий на функцию экзотический объект) и была создана внутри другой функции (different), она выполняет поиск переменных из closure scope как функции original делает.

let y = 'GLOB';
function closure(){
  let x = 'x from closure';
  return function original(){
    console.log(x,'|', y);
  }
}

function different(){
  let x = 'x from different';
  let y = 'I have no access too';
  let initial = closure();
  let g = closure().bind(null);// retain same LE
  console.log(g !== initial); // true
  return g; 
}

let bindDoesntAffectClosure = different();
bindDoesntAffectClosure(); // x from closure | GLOB

1 Ответ

0 голосов
/ 15 января 2019

Согласно MDN: если у нас есть функция f, то при вызове f.bind(someObject) создается новая функция с таким же телом и scope как f. Поэтому не имеет значения , где была создана новая ограниченная функция - она ​​всегда будет иметь ссылку на область, в которой было объявлено f.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...