Javascript 闭包:作用域链变量-不确定变量如何链接
对Javascript来说真的很陌生。此代码取自MDNJavascript 闭包:作用域链变量-不确定变量如何链接,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;
// 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
insidesm
),则需要调用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)代码>