Why can I not pass a function call (rather than a function reference or an anonymous function) to setTimeout()?

前端 未结 5 583
庸人自扰
庸人自扰 2020-12-07 05:52

Please ignore the fact that this code achieves nothing and apologies for what\'s probably an inane question!

I understand that I cannot pass a function call into

相关标签:
5条回答
  • 2020-12-07 06:12

    you can try this:

    setTimeout(function(){printer(name)}, 1000)
    
    0 讨论(0)
  • 2020-12-07 06:14

    This is because of the order of execution. If you pass a function call to setTimeout, the function will be executed immediately, i.e. the function is put on javascript's execution stack immediately.

    If you pass a function name, i.e. a reference to a function, the function is only put in the javascript thread's execution stack once the timer finishes.

    0 讨论(0)
  • 2020-12-07 06:25

    You can do it like this:

    setTimeout(printer, 1000, name)
    
    0 讨论(0)
  • 2020-12-07 06:26

    The correct way of passing a function reference is to use callbacks.

    names.forEach(name => setTimeout(function() {
        printer(name);
    }, 1000));
    

    callbacks contains reference to the function.

    setTimeout(callbackFunction, milliseconds);
    
    0 讨论(0)
  • 2020-12-07 06:36

    setTimeout should take a function as its first argument.

    Please refer:

    https://www.w3schools.com/jsref/met_win_settimeout.asp

    Here you are passing the result of the function as the first argument which is undefined.

    0 讨论(0)
提交回复
热议问题