Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 变量中的函数名_Javascript_Jquery - Fatal编程技术网

Javascript 变量中的函数名

Javascript 变量中的函数名,javascript,jquery,Javascript,Jquery,我在尝试调用一个函数时遇到了一个问题,该函数的名称存储在一个变量中。我发现了一些关于stackOverflow问题的问题,但仍然无法解决我的问题。 据我所知,使用 window[functionName](); 应该调用我想要的函数。我创建了一个我希望能澄清我的问题的网站。 问题是,我没有调用我的函数,而是得到了一个错误: 窗口[functionName]不是函数 我相信我遗漏了一些小东西,但在花了很长时间试图找出问题所在后,我决定在这里也尝试一下。 这个语法工作得很好(使用了示例fiddle

我在尝试调用一个函数时遇到了一个问题,该函数的名称存储在一个变量中。我发现了一些关于stackOverflow问题的问题,但仍然无法解决我的问题。 据我所知,使用

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,但我的名声还不允许