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