function outer() {
let xx = 0;
function inner(fun) {
console.log(fun());
fun();
return "ds";
}
return inner;
}
const x = outer();
function fun() {
xx++;
return xx;
}
const y = x(fun);
console.log(y);
这里函数 fun() 在闭包函数中被调用,因此它应该具有其静态内容的数据,该数据是词法范围并且应该具有 xx 的值,但它给出了引用错误,请任何人解释我为什么会这样。
请任何人向我解释为什么会这样。
xx
在 outer
函数 definition 的范围内。你期望它存在于一个完全独立的函数中,它绝对不会存在。范围绝对不会扩展到在您的上下文中调用的函数。你能想象如果你的函数受制于调用者的范围吗?1
如果你需要访问它,那么让你的内部函数看起来像:
function inner(fun) {
// ...
xx = fun(xx)
// ...
}
--
1 不需要那么活跃的想象力,因为当你过度使用全局变量时就会发生这种情况。