为什么通过括号表示法调用函数

时间:2014-04-18 14:19:10

标签: javascript

我有以下代码:

function hi(){
alert("hi");
}

window["hi"]();

我以为hi会被执行。有什么类似的东西,我能做什么? (请不要评价)

编辑:

我想用括号表示法,因为函数名称将以字符串形式显示。

2 个答案:

答案 0 :(得分:3)

如果它不起作用,你可能在错误的范围内,尝试

window.hi = function(){
    alert("hi");
}

window["hi"]();

编辑:

如果在jsFiddle中进行测试,则默认选项onLoadonDomReady选项会插入一个事件处理程序,该处理程序等待带回调的DOM准备就绪。

回调函数会创建一个新范围,因此在向窗口对象添加属性时,必须使用window.prop专门引用它,只需键入prop是不够的,因为它不在正确的范围内。

答案 1 :(得分:0)

您可以直接调用它:

hi();

或者

window.hi();

如果你真的想要涉及全局对象。

编辑如果您希望通过动态名称访问该功能,那么您当然可以,但功能必须可以作为某个对象的属性。全局对象是一种可能性:

function hi() {
  alert("hi");
}

window.hi = hi;

然后window["hi"]()将有效。或者,您可以为此目的创建对象:

var functionRegistry = {}

function hi() {
  alert("hi");
}

functionRegistry.hi = hi;

然后functionRegistry["hi"]()将有效。