我正在尝试使用包含函数名称的字符串来执行函数。
Several resources I've found建议这样的事情:
function runMe(){alert("fail"));
var fnstring = "runMe";
var fn = window[fnstring];
fn();
但是,它对我来说根本不起作用( JSFiddle demo )。我最终得到的 fn
为未定义。我是否做错了什么,或者窗口
行为发生了变化?
最佳答案
由于提升,您收到 Uncaught TypeError: undefined is not a function
错误。查看您提供的第一个链接,您的版本与他们的版本之间有一个关键区别:条件。
function runMe(thething) {
alert("the function has successfully run: " + thething);
}
// function we want to run
var fnstring = "runMe";
alert("string: " + fnstring);
// find object
var fn = window[fnstring]("lkjlksdfsdfj");
alert("function: " + fn);
// is object a function?
alert("is function?: " + typeof fn === "function");
fn();
My version, working without errors :
function runMe(thething) {
console.log("the function has successfully run: " + thething);
}
// function we want to run
var fnstring = "runMe";
// find object
var fn = window[fnstring]("lkjlksdfsdfj");
// is object a function?
if (typeof fn === "function") fn();
您的版本抛出错误的原因是它被提升为如下所示:
function runMe(thething) {
alert("the function has successfully run: " + thething);
}
var fnstring, fn;
fn();
fnstring = "runMe";
fn = window[fnstring]("lkjlksdfsdfj");
所以当它被调用时,它不是一个函数;这是一个 undefined variable 。
另一方面,据我了解提升,我的版本被提升如下:
function runMe(thething) {
console.log("the function has successfully run: " + thething);
}
var fnstring, fn;
fnstring = = "runMe";
fn = window[fnstring]("lkjlksdfsdfj");
if (typeof fn === "function") fn();
这样,当函数被实际调用时,一切就都准备好了。
关于javascript - 使用窗口从字符串执行函数不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25171584/