Javascript 带方括号的函数

Javascript Function With Square Brackets

我通常在 Python 中编程,但今天我试图对一些 Javascript 代码进行逆向工程,我遇到了这一行:

var ABC = DEF[XYZ];

DEF 是之前定义的 function。它需要一个参数。 XYZ 是之前创建的 string,它包含之前 运行 DEF 的结果。

我知道的不多JavaScript,但在我看来它正在定义一个名为 ABC 的变量,其中包含 运行 函数 DEF 的结果使用参数 XYZ。但是,后面有一行 var GHI = ABC(JKL, DEF(MNO))JKLMNO 都是之前定义的变量)。

令我困惑的是 ABC 被定义为变量,而不是函数。所以我认为这与之前看到的方括号有关。

所以我的问题是:那些方括号的用途是什么?

what is the purpose of those square brackets?

访问对象的成员。

它不是调用函数。它试图访问对象 DEF 的成员(没有看到其余代码,无法判断 DEF 是什么类型的对象,因为您可以对任何类型使用对象成员加入包含成员的对象,如普通对象、函数、数组等)例如:

var DEF = {
  foo: 'bar'
};

var XYZ = 'foo';

var ABC = DEF[XYZ];

console.log(ABC); // => 'bar'

再举个例子,DEF 也可以是一个数组,如果 XYZ 是一个数字,那么它正在访问该数组的特定索引。

更新

如果 DEF 是一个函数,您仍然可以访问它的成员:

function DEF(arg) {
  // do something with arg
}

DEF.foo = function(str) {
   console.log('I am doing ' + str)
}

var XYZ = 'foo'

console.log(DEF[XYZ]) // => function() {}

var ABC = DEF[XYZ]

ABC('yoga') // => 'I am doing yoga'

你可以这样调用DEF[XYZ](someArgument)