【问题标题】:Closures: Scope Chain Variables - Not sure how variables link up闭包:范围链变量 - 不确定变量如何链接
【发布时间】:2020-10-27 07:07:27
【问题描述】:

对 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

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

【问题讨论】:

  • 没有所有变量,它看起来像这样:var s3 = sum(1)(2)(3)(4);

标签: javascript variables scope closures


【解决方案1】:
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

【讨论】:

    猜你喜欢
    • 2012-05-23
    • 2016-12-20
    • 1970-01-01
    • 2021-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-22
    相关资源
    最近更新 更多