在javascript中解释var a = b.c = {}?

时间:2017-07-11 07:02:22

标签: javascript node.js

我正在经历node.js,我在模块部分遇到了类似var exports = module.exports = {};的内容。

这与var a=b.c={}非常相似,我如何将其可视化?

这里发生了什么?

根据我的理解,ab都被指定为对象,它们都描述相同的东西,或者它们都引用相同的东西?

示例

exports.sayHelloInEnglish = function() {
  return "HELLO";
};

exports.sayHelloInSpanish = function() {
  return "Hola";
};

相同
module.exports = {
  sayHelloInEnglish: function() {
    return "HELLO";
  },

  sayHelloInSpanish: function() {
    return "Hola";
  }
};

有人可以用更简单的术语向我解释一下吗?

2 个答案:

答案 0 :(得分:3)

  

var exports = module.exports = {};,我如何想象它?

首先确保了解它是如何解析的,语法包含哪些组件。它基本上是两个嵌套的赋值 1

var exports = (module.exports = {});

您可以将其转换为等效的

var _temp = {};
module.exports = _temp;
var exports = _temp;

所以是的,它们都包含相同的对象。

1:在语法上它是变量声明的初始化中的赋值表达式,但为了便于理解,我们忽略了var

答案 1 :(得分:0)

enter image description here

根据声明的解析树,以下是按顺序发生的事情。

  1. 对象b将添加一个名为c的成员,或者如果它已经存在,则会被访问。
  2. b.c设置为文字{}
  3. a的值设置为b.c的值 在第3步中,它意味着两者都指向相同的事物。
  4. 例如,你可以试试这个。

     var a = [1,5]
     var b = a
     b[1] = 2
     console.log(a)
     console.log(b)
    

    两者都有更新的值。