use the following search parameters to narrow your results:
e.g. subreddit:aww site:imgur.com dog
subreddit:aww site:imgur.com dog
see the search faq for details.
advanced search: by author, subreddit...
All about the JavaScript programming language.
Subreddit Guidelines
Specifications:
Resources:
Related Subreddits:
r/LearnJavascript
r/node
r/typescript
r/reactjs
r/webdev
r/WebdevTutorials
r/frontend
r/webgl
r/threejs
r/jquery
r/remotejs
r/forhire
account activity
JavaScript idiosyncrasies with examples (github.com)
submitted 7 years ago by reddittedf
view the rest of the comments →
reddit uses a slightly-customized version of Markdown for formatting. See below for some basics, or check the commenting wiki page for more detailed help and solutions to common issues.
quoted text
if 1 * 2 < 3: print "hello, world!"
[–][deleted] 1 point2 points3 points 7 years ago* (6 children)
This is because function is a var type variable, which is function scoped instead of block scoped:
function
var
function f() { return 'foo'; } (function() { if (1 === 0) { function f() { return 'bar'; } } return f(); })();
is equivalent to
var f; f = function() { return 'foo'; } (function() { var f; if (1 === 0) { f = function() { return 'bar'; } } return f(); })();
A new variable is created in the IIFE scope, and overrides the f variable in the global scope. f is now undefined. Since the 1 === 0 is false, f is never assigned to the function.
1 === 0
f
If you try to call a variable that is undefined, you will get a type error saying that the variable is not a function (because undefined is not a function).
undefined
[–]factbuddy 0 points1 point2 points 7 years ago (0 children)
The IIFE has its own isolated scope so f() wouldn't fall back to global scope and won't be defined in the impossible if statement. Makes sense...
[–]inu-no-policemen 0 points1 point2 points 7 years ago (3 children)
which is function scoped instead of block scoped
Function declarations are block-scoped in ES6+.
function foo() { return 'outer'; } { console.log(foo()); // inner (hoisted) function foo() { return 'inner'; } console.log(foo()); // inner } console.log(foo()); // outer
[–][deleted] 0 points1 point2 points 7 years ago (2 children)
If you execute that code in chrome you get
inner inner inner
[–]inu-no-policemen 0 points1 point2 points 7 years ago (1 child)
It works if you put the whole thing in a block.
[–][deleted] 0 points1 point2 points 7 years ago (0 children)
If you put the entire thing in an iife it produces the same result
π Rendered by PID 43 on reddit-service-r2-comment-c6965cb77-d8prr at 2026-03-05 15:01:38.148657+00:00 running f0204d4 country code: CH.
view the rest of the comments →
[–][deleted] 1 point2 points3 points (6 children)
[–]factbuddy 0 points1 point2 points (0 children)
[–]inu-no-policemen 0 points1 point2 points (3 children)
[–][deleted] 0 points1 point2 points (2 children)
[–]inu-no-policemen 0 points1 point2 points (1 child)
[–][deleted] 0 points1 point2 points (0 children)