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][]];