Javascript Node.js带有方括号的全局变量和函数-为什么这样做?

Javascript Node.js带有方括号的全局变量和函数-为什么这样做?,javascript,node.js,variables,brackets,Javascript,Node.js,Variables,Brackets,我有一个模块,它使用以下伪代码的结构将对象返回回调: module.exports=function(){ global.foo=function(){ var callbacks=Array.prototype.slice.call(arguments,1); var conf=arguments[0]; return global[callbacks.shift()].apply(null,[conf,callbacks]); } global.bar=function()

我有一个模块,它使用以下伪代码的结构将对象返回回调:

module.exports=function(){

global.foo=function(){
  var callbacks=Array.prototype.slice.call(arguments,1);
  var conf=arguments[0];
  return global[callbacks.shift()].apply(null,[conf,callbacks]);
 }

global.bar=function(){
  var callbacks=Array.prototype.slice.call(arguments,1);
  var conf=arguments[0];
  return global[callbacks.shift()].apply(null,[conf,callbacks]);
 }

// This one is where i ran into trouble
global.foobar=function(){
  var callbacks=Array.prototype.slice.call(arguments,1);
  var conf=arguments[0];
  // right here
  if(callbacks.length===[].length){
     return global[callbacks.shift()].apply(null,[conf,callbacks]);
 }
}
var conf={'pseudo':'object'};   
return global['foo'](conf,'foo','bar','foobar');
}
在foobar之前一切都很好,当我开始检查是否还有回调时——因为如果有,我想调用它们——回调。此时的长度是1。这对我来说毫无意义,我发现在那个时候回调实际上等于[]。我不知道为什么会被退回,所以我想我有两个问题。有人知道为什么回调等于[]吗

我在这一过程中发现,当在全局名称空间中使用作为函数调用的字符串时——就像在var bar='foo'中一样;全局[bar]调用global.foo-忽略多个括号。例如,全局[foo]==全局[foo']。至少对我来说,这也够奇怪的了,以下几点:

// With 
global.bar='foo';
global.foo=function(){return true;}
//the following
global[global[bar]]()
// throws a TypeError: undefined is not a function
这些对我来说都没有意义

我知道这个问题最后问了三个问题,有点杂乱无章,但坦率地说,我有点困惑,我不确定我想问什么,我想知道什么,所以我什么都说了

我的主要问题是关于多个括号,以及为什么这样做有效

谢谢

我的主要问题是关于多个括号,以及为什么会这样 工作

多个方括号仅在尝试进行字符串转换以获取属性名称时起作用。因此,无论有多少嵌套数组,它最终都会在每个数组上调用.toString,而且由于内部数组中只有一个包含字符串的项,因此多个.toString调用最终只会解析为内部字符串

以下是浏览器中相同概念的演示:

window.foo=hi 文件.书面通知[foo][foo][]];