I am trying to wrap my head around as to why the following code results in a stack overflow when the parentheses are included, but do not when they omitted.
I am ca
By writing
foo()
you're actually calling foo at that moment. Which of course then calls foo() again...until you stackoverflow.
In case 2 you're effectively passing a "reference" to foo, saying "run this in 2s". Not actually calling foo().
So use parens when you actually want to invoke it. Not when you want to refer to it.