javascript - 使用窗口从字符串执行函数不起作用

标签 javascript string function

我正在尝试使用包含函数名称的字符串来执行函数。

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 错误。查看您提供的第一个链接,您的版本与他们的版本之间有一个关键区别:条件。

Your (second) version :

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/

相关文章:

c++ - 在 stringstream 的 ssh 命令中转义 bash 脚本中的引号

javascript - 是否可以在 JavaScript 中调用另一个函数中本地定义的函数?

c - 返回从 volatiles 标量初始化的字符串表现得很奇怪?

java - 将字符串中的英文数字替换为波斯数字,URL 除外

javascript - localStorage.length 删除项目后未更新(javascript)

javascript - 如何在 ReactJS 中从 props.children 获取数据到它的父级?

javascript - 使函数仅对其原型(prototype)可用

c - C 中参数的数量可变?

javascript - 如何使用 lodash 递归地从 JSON 中删除空对象

javascript - javascript中的动态对象文字?