Skip to content

Instantly share code, notes, and snippets.

@jackfranklin
Last active December 11, 2015 20:29
Show Gist options
  • Save jackfranklin/4655886 to your computer and use it in GitHub Desktop.
Save jackfranklin/4655886 to your computer and use it in GitHub Desktop.
// what are the key differences between:
var foo = function() {
alert("Hello World");
};
// and
function foo() {
alert("Hello World");
}
@jackfranklin
Copy link
Author

@davemackintosh would you explain your reasoning behind:

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

I don't really see the benefits of doing that over just var foo = function() {}.

@tgvashworth
Copy link

Just to clarify my first statement:

var a = 1;
function b() {
  a = 10;
  return;
  function a() {}
}
b();
alert(a);

Produces '1' – which is logical but totally unintuitive because it's not always clear that function declarations are hoisted. Rewritten it makes much more sense:

var a = 1;
function b() {
  a = 10;
  return;
  var a = function() {}; // var a is hoisted, so a = 10 alters local scope 'a'
}
b();
alert(a);

Resulting in:

var a = 1;
function b () {
  var a;
  a = 10;
  return;
  a = function() {}; // var a is hoisted, so a = 10 alters local scope 'a'
}
b();
alert(a);

I worded it badly, but I'm saying it's not as clear what's going on.

@tgvashworth
Copy link

@jackfranklin or even var foo = function foo() {}?

@davemackintosh
Copy link

foo is defined at parse time so can be used and var foo is just an alias at run time (i used foo but could be "bar") I dont use it often was just an example of how to get best of both worlds.

Try running:

foo(); // runs the parse time code
function foo () {alert('hello')};
var foo = foo;
foo(); // runs the runtime code.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment