javascript - 作为参数的函数

时间:2015-07-26 01:17:33

标签: javascript

我只是想知道;

为什么这样做;

data.encode('utf8')

但不是这个;

    test = function(message) {
        console.log('xxx');
    }

    setTimeout(test, 3000);

我知道它应该是这样写的; 但上面的版本会更方便......

    test = function(message) {
        console.log(message);
    }

    setTimeout(test('xxx'), 3000);

5 个答案:

答案 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')的结果“这是未定义的 - 不是一个函数。