变量中的函数名称

时间:2013-12-17 16:13:09

标签: javascript jquery

我在尝试调用一个将其名称存储在变量中的函数时遇到问题。我在stackOverflow上找到了一些关于我的问题的问题但是,我似乎无法解决我的问题。 根据我的理解,使用

window[functionName]();

应该调用我想要的功能。我创建了jsfiddle,希望能澄清我的问题。 问题是,我没有调用我的函数,而是出现错误:

  

window [functionName]不是函数

我相信我遗失了一些小事,但经过很长一段时间试图找出问题所在,我决定在这里尝试一下。

3 个答案:

答案 0 :(得分:6)

因为你的函数是在onload处理程序中添加的,所以它们是gloabl范围内不可用的方法的本地函数。

在左侧面板的第二个下拉列表中选择no-wrap header / body,然后在dom ready处理程序中添加jQuery处理程序。

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');
    });
})

演示:Fiddle

jsfiddle默认在window.onload = function(){}处理程序中添加脚本,因此您声明的任何函数/变量将在该函数作用域的本地,并且在全局作用域(窗口)中不可用

答案 1 :(得分:2)

WORKING JS FIDDLE

这种语法很好用,(使用你的示例小提琴代码)。在这里我明确地将该函数添加到窗口对象。

关于为什么这样做有很多信息On This Question和Arun P Johny的回答给出了一个不错的解释,但基本上它归结为表达一个函数并声明一个函数。

window.one = function() {
  alert('one called');
}

答案 2 :(得分:0)

您在分配功能时遇到问题。你可以这样做:

我改变了你的代码:

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]();
});

并修复了小提琴: http://jsfiddle.net/Nne6W/