解释为什么闭包中的函数表现不同[重复]

问题描述 投票:0回答:1

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 的值,但它给出了引用错误,请任何人解释我为什么会这样。

请任何人向我解释为什么会这样。

javascript closures lexical-scope
1个回答
0
投票

xx
outer
函数 definition 的范围内。你期望它存在于一个完全独立的函数中,它绝对不会存在。范围绝对不会扩展到在您的上下文中调用的函数。你能想象如果你的函数受制于调用者的范围吗?1

如果你需要访问它,那么让你的内部函数看起来像:

function inner(fun) {
  // ...
  xx = fun(xx)
  // ...
}

--

1 不需要那么活跃的想象力,因为当你过度使用全局变量时就会发生这种情况。

© www.soinside.com 2019 - 2024. All rights reserved.