如何使用变量名执行函数?

时间:2018-07-07 18:45:55

标签: javascript jquery

这是我的代码:

$(function(){
  function myfunc(){
    alert("executed");
  }
  
  var function_name = "myfunc";
  window[function_name]();
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

如您所见,该函数未定义。为什么?而我该如何运作呢?

3 个答案:

答案 0 :(得分:4)

该函数未在全局范围内定义,因此它不是窗口对象的成员。

您可以像这样将函数附加到窗口对象。

$(function(){
  window.myfunc = function(){
    alert("executed");
  };

  var function_name = "myfunc";
  window[function_name]();
})

答案 1 :(得分:1)

它仅适用于全局函数,因为作用域与window对象相同。

您可以将函数与任何其他对象一样,赋予window对象的通配属性。

function myfunc(){
    alert("executed");
}

$(function(){
    var function_name = "myfunc";
    window[function_name]();
    window.foo = _ => console.log('foo');
    window.foo();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

答案 2 :(得分:0)

虽然直接回答您的问题不是将函数定义为Global,所以尝试将其作为window的属性来调用失败了,但是将函数置于Global范围并不是一个好方法答案。

相反,使函数成为用户定义对象的方法(可以将其置于您喜欢的任何范围内),然后将该函数作为该对象的属性来调用:

// Immediately-Invoked Function Expression (IIFE)
// that keeps all of its contents out of the Global scope
(function(){

  let functionHolder = {
    someFunction : function(){ console.log("You did it!"); }
  };

  // Set up a variable that has the same name as the function
  let funcName = "someFunction";

  // Call the function via the object
  functionHolder[funcName]();

})()