Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Could you go into more detail about why you would do A)

  var func = function func() { /* blah */ };
Instead of B)

  function func() { /* blah */ };


Let's say you want to define a function to be used for a certain operation on two numbers dependent on some boolean.

    if (addition) {
        // operation = add
    }
    else {
        // operation = subtract
    }
If you use function declarations you might run into bugs

    if (addition) {
        function operation (a, b) { return a + b; }
    }
    else {
        function operation (a, b) { return a - b; }
    }
    console.log(operation(1,2));
Here it might happen that you don't get the expected function.

Additionally it's much less clear what's going on. Compare it to this:

    var operation;
    if (addition) {
        operation = function add (a, b) { return a + b; };
    }
    else {
        operation = function subtract (a, b) { return a - b; };
    }
    console.log(operation(1, 2));
Here it's very obvious what's going on and your operation function has a name that reflects what it does.

Personally I prever never to rely on function hoisting and always declare functions using function expressions. It keeps the code style more consistent and it's clearer what is happening in your program.


    var func = _.memoize(function private_non_memoized_func() {
      func(); // "light"
      private_non_memoized_func(); // "heavy"
    });




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: