我刚刚询问过按名称调用函数,现在我想在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);
}
setTimeout
效果很好,但我必须保存被调用函数的返回值。我写的时候:setTimeout('alert(window[\'' + funcName + '\']' + command + ')', 1000);
它提醒功能的返回值。我该如何储存?
答案 0 :(得分: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);
}
答案 1 :(得分:2)
如果您想从ECall
返回一个值,则无效。
setTimeout
是异步的,这意味着ECall
将在调用setTimeout
代码之前返回。
或者,如果您希望alert()
成为setTimeout
的一部分,则可以传递匿名函数。此外,最好不要将字符串传递给setTimeout
。
我会这样做:
function ECall(funcName, arg)
{
// Get an Array of the arguments, except for the first one.
var args = Array.prototype.slice.call( arguments, 1 );
// Pass an anonymous function that calls the global "funcName" function
// inside the alert().
// It uses .apply() to pass the arguments we sliced.
setTimeout( function() {
alert( window[ funcName ].apply( window, args ) );
}, 1000);
}