闭包: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
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