内部関数は、有効期限が切れた後に親関数を呼び出すにはどうすればよいですか?
setTimeout(main, 2000);
function main(){
/* .... code */
setTimeout(console.log("hello after 5 seconds"), 5000);
}
意図したアクションはhello after 5 seconds
、5 秒 (合計 7) で印刷することです。上記のコードを使用すると、2 秒で印刷されます。
内部関数は、有効期限が切れた後に親関数を呼び出すにはどうすればよいですか?
setTimeout(main, 2000);
function main(){
/* .... code */
setTimeout(console.log("hello after 5 seconds"), 5000);
}
意図したアクションはhello after 5 seconds
、5 秒 (合計 7) で印刷することです。上記のコードを使用すると、2 秒で印刷されます。
setTimeout
関数参照を渡す必要があります。で、すぐsetTimeout(console.log("hello after 5 seconds"), 5000);
に呼び出します。関数名の後に書くときはいつでも、それを呼び出しています。console.log
()
console.log
はundefinedを返します。これが に渡されsetTimeout
ます。未定義の値を無視するだけで、何もしません。(そして、それはエラーをスローしません。)
コールバック関数にパラメーターを渡す必要がある場合は、いくつかの方法があります。
匿名関数:
setTimeout(function() {
console.log('...');
}, 5000);
関数を返します:
function logger(msg) {
return function() {
console.log(msg);
}
}
// now, whenever you need to do a setTimeout...
setTimeout(logger('...'), 5000);
これが機能するのは、呼び出すlogger
と単に を閉じる新しい無名関数が返されるためmsg
です。返された関数は、実際に に渡されるものsetTimeout
であり、コールバックが起動されるとmsg
、クロージャーを介して にアクセスできます。
私はあなたが何を望んでいるのか理解したと思います。見てください:
var main = function(){
console.log("foo");
var function1 = function( string ) {
console.log("function1: " + string);
};
var function2 = function() {
console.log( "hadouken!" );
};
// you will need to use a closure to call the function
// that you want with parameters
// if you dont have parameters, just pass the function itself
setTimeout(function(){ function1("bar") }, 5000);
setTimeout(function2, 6000);
}
setTimeout(main, 2000);
または:
function main(){
console.log("foo");
function function1( string ) {
console.log("function1: " + string);
};
function function2() {
console.log( "hadouken!" );
};
// you will need to use a closure to call the function
// that you want with parameters
// if you dont have parameters, just pass the function itself
setTimeout(function(){ function1("bar") }, 5000);
setTimeout(function2, 6000);
}
setTimeout(main, 2000);
私は通常、最初のsintaxを好みます。
jsFiddle: http: //jsfiddle.net/davidbuzatto/65VsV/
それは動作します!あなたは言葉を逃しますfunction
。
setTimeout(main, 1000);
function main() {
function function1 () { alert(1); };
setTimeout(function1, 1000);
}