JavaScript 关闭和意外 - 未定义 - return

JavaScript closures and an unexpected - undefined - return

当我试图理解 JS 闭包时,我写了这段代码:

const outer = function() {
  let a = 10, c = 100;
  const inner = function() {
    let b = 20;
    console.log(a + b); // line 5 (30)
  };
  return inner;
};
let K = outer();
console.log(K()); // line 10 (undefined)

控制台的输出:

30 ( line 5)

undefined ( line 10 )

the console outputs the result ( 30 )

它指向代码的(第 5 行)(这对我来说似乎很合理) 在那之后(这就是我不明白的)它 returns undefined 当它回到最后一行代码(第 10 行) 任何人都可以澄清这个 JS 行为吗?

在您的代码中,K 是执行 outer 的结果,在本例中是函数 inner.

当你执行K时(已经赋值了前面定义为inner的函数),得到30的控制台输出,即a + b.

但是,您还记录了 K 的 return 值,并且因为您的 inner 函数没有 return 值,所以您得到 undefined.

尝试修改您的代码以获得 inner return 一个值,您就会明白我的意思:

const outer = function(){
    let a = 10, c = 100 ; 
    const inner = function(){
        let b = 20 ; 
        console.log( a + b ) ; 
        return a * b; // Without this return, the return value of inner is undefined.
    }
    return inner ; 
}
let K = outer(); 
console.log( K() ) ;