这是我的代码:
$(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>
如您所见,该函数未定义。为什么?而我该如何运作呢?
答案 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]();
})()