Named functions in Javascript accessible before declaration, but function literals aren't -
this question has answer here:
i'm trying figure out how works. when reference named javascript function hasn't been declared yet, in circumstances, works. if use function literal, doesn't, doesn't fail referenceerror
.
function works() { var works_ref = foo; function foo() { console.log('ok'); }; console.log('works ' + works_ref); } function fails() { var fails_ref = foo; var foo = function() { console.log('ok'); }; console.log('fails ' + fails_ref); } works(); fails();
this returns
"works function foo() { console.log('ok'); }" "fails undefined"
i'm wondering how first example works—this interpreted language, not compiled, i'd expect sort of forward reference fail—and why doesn't second example generate referenceerror
?
function foo() { console.log('ok'); };
this called function declaration. processed @ compile time. so, javascript knows there function called foo
. why assigns function object here
var works_ref = foo;
in second case,
var foo = function() { console.log('ok'); };
foo
variable, declared later in function. so, because of hoisting,
var fails_ref = foo;
is aware of fact foo
defined somewhere in function doesn't know actual value of it. because value assignment var foo = function() {}
happens @ runtime. why default value undefined
used foo
till actual assignment statement executed.
Comments
Post a Comment