内部函数过期后如何调用父函数?
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);
}