为什么有界函数fBounded = f.bind()与原始函数f具有相同的[[Environment]]引用?

时间:2019-01-04 14:15:37

标签: javascript closures

即使g有界函数是一个全新的函数(更新:类似函数的奇异对象),并且是在另一个函数(different)中创建的,它仍会从closure中查找变量作用域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 :(得分:0)

根据MDN:如果我们具有f函数,则调用f.bind(someObject)将创建一个新函数,其相同主体和范围为{{ 1}}。 因此,在何处创建新的有界函数都没关系-它总是引用声明f的范围。