JavaScript调用一个函数,该函数的名称是匿名作用域中函数的字符串

时间:2013-12-19 18:44:46

标签: javascript function closures

这在javascript中可行吗?我试着调用名为“name”的变量的函数(对不起!)。该功能不在全球范围内。

(function () {
    var myFunc, name;

    myFunc = function(){
        alert("Hi!");
    };
    name = "myFunc";
    //myFunc();  // work

    (name)();   // do not work
    this[name]();   // do not work

})();

注意:我有一个jsfiddle条目here

3 个答案:

答案 0 :(得分:4)

“本地范围”没有对象,就像全局范围一样。您可以(并且应该)创建自己的对象来保存您的函数:

(function () {
    var name = "myFunc";

    var funcs = {
        myFunc: function(){
            alert("Hi!");
        }
    };

    funcs[name]();
})();

答案 1 :(得分:2)

eval(name)();

eval不是 总是 邪恶。确实有它的用途。

如果您真的不喜欢eval,请尝试将变量存储在对象中:

(function () {
    var vars = {};

    vars.myFunc = function(){
        alert("Hi!");
    };

    vars.name = "myFunc";
    //vars.myFunc();  // work

    vars[vars.name]();    
})();

答案 2 :(得分:1)

更改

myFunc = function(){

this.myFunc = function(){

然后这将有效:

this[name]();

演示:http://jsfiddle.net/B7QVj/6/