2

当我试图理解 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(第 5 行)

未定义(第 10 行)

控制台输出结果(30)

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

4

1 回答 1

4

在您的代码中,K是执行的结果outer,在这种情况下是函数inner

当您执行时K(已为其分配了inner前面定义的函数),您将获得 30 的控制台输出,即a + b.

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

尝试修改您的代码以inner返回一个值,您会明白我的意思:

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() ) ;
于 2020-07-30T04:24:17.243 回答