Если вы хотите вернуть значение из 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);
}