在SetTimeout之后获取返回值

Max*_*rai 5 javascript eval return function settimeout

我刚刚问过按名称调用函数,现在我想在以下处理return语句SetTimeout:

function ECall(funcName, arg)
{
    command += "(";
    for (var i=1; i<arguments.length; i++) 
    {
        command += "'" + arguments[i] + "'";
        if (i != arguments.length-1) command += ',';
    }
    command += ")";

    //var funcPtr = eval(funcName);
    //return funcPtr(arg); // This works, but I need SetTimeout

    setTimeout('window[\'' + funcName + '\']' + command, 1000);
}
Run Code Online (Sandbox Code Playgroud)

setTimeout效果很好,但我必须保存被调用函数的返回值.当我写:setTimeout('alert(window[\'' + funcName + '\']' + command + ')', 1000); 它警告函数的返回值.我该如何存放?

Tim*_*own 5

您不需要使用任何此字符串操作.只需传递一个函数引用即可window.setTimeout().要存储函数的返回值,只需将其分配给传递给函数的变量即可window.setTimeout()

var savedValue;

function ECall(funcName)
{
    var args = Array.prototype.slice.call(arguments, 1);
    var func = window[funcName];

    window.setTimeout(function() {
        savedValue = func.apply(this, args);
    }, 1000);
}
Run Code Online (Sandbox Code Playgroud)