Javascript 闭包:作用域链变量-不确定变量如何链接

Javascript 闭包:作用域链变量-不确定变量如何链接,javascript,variables,scope,closures,Javascript,Variables,Scope,Closures,对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;

对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
当我试着输入不同的变量名(例如下面的)时,它们似乎不起作用,我不明白所有的东西是如何联系在一起给出答案的

// 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
我可以继续抛出更多不起作用的例子。有人,请帮助我理解第一个示例是如何工作的。

函数sm(a){
返回函数sa(b){
返回函数sb(c){
//外部功能范围
返回函数sc(d){
//局部范围
返回a+b+c+d+e;
}
}
}
}
函数
sm
接受一个参数并返回一个接受一个参数的函数。函数
sm
返回的函数未命名为
sb
。尝试将其视为
sm
的返回值。 所以,当你这么做的时候

var s=sm(1);
返回的函数存储在变量
s

现在,如果要运行第二个函数(
sa
inside
sm
),则需要调用s

var s1=s(2);
返回的函数(sb)存储在varibale s1中。 同样地

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

如果没有所有变量,它看起来是这样的:
var s3=sum(1)(2)(3)(4)