Difference between setTimeout with and without quotes and parentheses

javascript, settimeout

Solution

Using `setInterval` or `setTimeout`

You should pass a reference to a function as the first argument for `setTimeout` or `setInterval`. This reference may be in the form of:

An anonymous function

setTimeout(function(){/* Look mah! No name! */},2000);

A name of an existing function

function foo(){...}

setTimeout(foo, 2000);

A variable that points to an existing function

var foo = function(){...};

setTimeout(foo, 2000);

Do note that I set "variable in a function" separately from "function name". It's not apparent that variables and function names occupy the same namespace and can clobber each other.

Passing arguments

To call a function and pass parameters, you can call the function inside the callback assigned to the timer:

setTimeout(function(){
  foo(arg1, arg2, ...argN);
}, 1000);

There is another method to pass in arguments into the handler, however it's not cross-browser compatible.

setTimeout(foo, 2000, arg1, arg2, ...argN);

Callback context

By default, the context of the callback (the value of `this` inside the function called by the timer) when executed is the global object `window`. Should you want to change it, use `bind`.

setTimeout(function(){
  this === YOUR_CONTEXT; // true
}.bind(YOUR_CONTEXT), 2000);

Security

Although it's possible, you should not pass a string to `setTimeout` or `setInterval`. Passing a string makes `setTimeout()` or `setInterval()` use a functionality similar to `eval()` that executes strings as scripts, making arbitrary and potentially harmful script execution possible.

Problem

I am learning JavaScript and I have learned recently about JavaScript timing events. When I learned about `setTimeout` at W3Schools, I noticed a strange figure which I didn’t run into before. They are using double quotes and then call the function. Example: ``` setTimeout("alertMsg()", 3000); ``` I know that double and single quotes in JavaScript means a string. Also I saw that I can do the same like that: ``` setTimeout(alertMsg, 3000); ``` With the parentheses it’s referring, without the parentheses it’s copied. When I am using the quotes and the parentheses it’s getting crazy. I will be glad if someone can explain to me the difference between these three ways of using `setTimeout`: With the parentheses: ``` setTimeout("alertMsg()", 3000); ``` Without the quotes and the parentheses: ``` setTimeout(alertMsg, 3000); ``` And the third is only using quotes: ``` setTimeout("alertMsg", 3000); ``` N.B.: A better source for `setTimeout` reference would be MDN.

Original source