当前位置: 代码迷 >> JavaScript >> javascript-作为参数
  详细解决方案

javascript-作为参数

热度:40   发布时间:2023-06-05 09:38:03.0

我只是想知道;

为什么这样做?

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

    setTimeout(test, 3000);

但这不是;

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

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

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

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

    setTimeout(function() { test('xxx'); }, 3000);

您要将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.

在您的第二个示例中,它立即使用字符串xxx调用test

在第二个示例中,您将立即调用该函数。 要传递字符串,可以bind参数,而不是单独调用它:

setTimeout(test.bind(null,'xxxx'), 3000);

  test = function(message) { alert(message); } setTimeout(test.bind(null,'xxxx'), 3000); 

如果用括号写一个函数名,它将调用它而不是提供引用。

第二个不起作用,因为setTimeout需要一个函数作为参数(它将调用该函数),并且您显示的第二个版本具有te??st('xxx'),这意味着“调用test('xxx')的结果”未定义- 不是函数。

  相关解决方案