闭包:Scope Chain Variables - 不确定变量 link up

Closures: Scope Chain Variables - Not sure how variables link up

Javascript 真的很陌生。此代码取自MDN。

// global scope
var e = 10;
function sum(a){
  return function sum2(b){
    return function sum3(c){
      // outer functions scope
      return function sum4(d){
        // local scope
        return a + b + c + d + e;
      }
    }
  }
}

var s = sum(1);
var s1 = s(2);
var s2 = s1(3);
var s3 = s2(4);
console.log(s3) //log 20

当我尝试输入不同的变量名称(下面的 EX)时,它们似乎不起作用,而且我不明白所有内容如何链接在一起以吐出答案 20。

// global scope
var e = 10;
function sum(a){
  return function sum2(b){
    return function sum3(c){
      // outer functions scope
      return function sum4(d){
        // local scope
        return a + b + c + d + e;
      }
    }
  }
}

var w = sum(1);
var x = s(2);
var y = s1(3);
var z = s2(4);
console.log(s3) //log 20

当我把它改成这个时,它也不起作用。控制台告诉我 sa 未定义

// global scope
var e = 10;
function sm(a){
  return function sa(b){
    return function sb(c){
      // outer functions scope
      return function sc(d){
        // local scope
        return a + b + c + d + e;
      }
    }
  }
}

var s = sm(1);
var s1 = sa(2);
var s2 = sb(3);
var s3 = sc(4);
console.log(sc) //log 20

我可以继续抛出更多无效的例子。有人,请帮助我了解第一个示例的工作原理。

function sm(a){
  return function sa(b){
    return function sb(c){
      // outer functions scope
      return function sc(d){
        // local scope
        return a + b + c + d + e;
      }
    }
  }
}

函数 sm 正在接受一个参数并且正在 returning 一个接受一个参数的函数。函数 sm returns 未命名为 sb。尝试将其视为 sm 的 return 值。 所以,当你这样做时

var s = sm(1);

returned函数存储在变量s

现在如果你想运行第二个函数(sm里面的sa)你需要调用s.

var s1 = s(2);

returned 函数 (sb) 存储在变量 s1 中。 同样,

var s2 = s1(3);
var s3 = s2(4);
console.log(s3); // 20