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



对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接受一个参数,并返回一个接受一个自变量的函数。sm返回的函数未命名为sb。试着把它看作是sm的返回值。所以,当你做时

var s = sm(1);

返回的函数存储在变量s

现在,如果您想运行第二个函数(sm中的sa(,您需要调用s。

var s1 = s(2);

返回的函数(sb(存储在变量s1中。类似地,

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

最新更新