Javascript 变量中的函数名
我在尝试调用一个函数时遇到了一个问题,该函数的名称存储在一个变量中。我发现了一些关于stackOverflow问题的问题,但仍然无法解决我的问题。 据我所知,使用Javascript 变量中的函数名,javascript,jquery,Javascript,Jquery,我在尝试调用一个函数时遇到了一个问题,该函数的名称存储在一个变量中。我发现了一些关于stackOverflow问题的问题,但仍然无法解决我的问题。 据我所知,使用 window[functionName](); 应该调用我想要的函数。我创建了一个我希望能澄清我的问题的网站。 问题是,我没有调用我的函数,而是得到了一个错误: 窗口[functionName]不是函数 我相信我遗漏了一些小东西,但在花了很长时间试图找出问题所在后,我决定在这里也尝试一下。 这个语法工作得很好(使用了示例fiddle
window[functionName]();
应该调用我想要的函数。我创建了一个我希望能澄清我的问题的网站。
问题是,我没有调用我的函数,而是得到了一个错误:
窗口[functionName]不是函数
我相信我遗漏了一些小东西,但在花了很长时间试图找出问题所在后,我决定在这里也尝试一下。
这个语法工作得很好(使用了示例fiddle中的代码)。这里,我显式地将函数添加到窗口对象
关于这一点的原因有很多信息,Arun p Johny的回答给出了一个很好的解释,但基本上可以归结为表达一个函数和声明一个函数
window.one = function() {
alert('one called');
}
因为函数是在onload处理程序中添加的,所以它们是gloabl作用域中不可用的方法的本地函数 在左侧面板的第二个下拉列表中选择no wrap header/body,然后将jQuery处理程序添加到dom就绪处理程序中
function one() {
alert('one called');
}
function two() {
alert('two called');
}
function three() {
alert('three called');
}
jQuery(function () {
jQuery("button").bind("click", function () {
var funcName = "one";
window[funcName]();
//alert('here');
});
})
演示:
默认情况下,jsfiddle将脚本添加到
window.onload=function(){}
处理程序中,因此您在其中声明的任何函数/变量都将位于该函数作用域的本地,并且在全局作用域(窗口)中不可用。您在调用函数时遇到了问题。您可以这样做:
我更改了您的代码:
window.one = function(){
alert('one called');
}
window.two = function() {
alert('two called');
}
window.three = function() {
alert('three called');
}
jQuery("button").on("click", function() {
var funcName = window.prompt("What function to fire?","");
window[funcName]();
});
并修复了小提琴:
如果您想将其作为
窗口的属性调用,首先必须将函数设置为窗口的属性。这是小提琴的一个问题。默认情况下,JSFIDLE会自动将代码包装到就绪处理程序中,因此函数不在全局范围内。您可以告诉JSFIDLE您不希望代码被包装(在下面的左上角,您可以选择使用jquery):您应该解释代码工作的原因,以便OP知道要解决什么问题。@Jibble在我回答问题后,不得不立即参加一个临时会议。但是现在这个问题已经得到了更彻底的回答,提供一个指向信息资源的链接似乎就足够了。谢谢你的回答,我会尽快接受它。还有一个问题。有没有办法调用窗口中创建的函数。onload?非常感谢您的快速帮助!本来会给一个+1,但我的名声还不允许