我只是想知道;
为什么这样做;
data.encode('utf8')
但不是这个;
test = function(message) {
console.log('xxx');
}
setTimeout(test, 3000);
我知道它应该是这样写的; 但上面的版本会更方便......
test = function(message) {
console.log(message);
}
setTimeout(test('xxx'), 3000);
答案 0 :(得分:1)
您将test
的返回结果分配给setTimeout
的回调参数,而不是传递函数引用。
function callback(callback) {
callback();
}
function say(message) {
console.log(message);
// this function doesn't return anything
}
// callback(say('Hello World!')) === callback() because say(message) doesnt return anything.
答案 1 :(得分:0)
在您的第二个示例中,它会立即使用字符串test
调用xxx
。
答案 2 :(得分:0)
您正在第二个示例中立即调用该函数。要传递字符串,您可以bind
参数而不是单独调用它:
setTimeout(test.bind(null,'xxxx'), 3000);
test = function(message) {
alert(message);
}
setTimeout(test.bind(null,'xxxx'), 3000);
答案 3 :(得分:0)
如果你用括号写一个函数名,它会调用它来代替它。
答案 4 :(得分:0)
第二个不起作用,因为setTimeout需要一个函数作为参数(它将调用),你显示的第二个版本有test('xxx'),这意味着“调用test('xxx')的结果“这是未定义的 - 不是一个函数。