It is a bold statement but most likely you have been declaring functions in the wrong way, lets find out why!

In JavaScript you have 2 ways (at least) to declare a function:

Declarative

This is the traditional way of declaring functions function foo() {}

Function expressions

Where you assign an anonymous function to a variable var foo = function(){}

JavaScript has a nefty feature, functions can be used before they are defined

asd();
function asd() {
    alert('asd');
}

This is perfectly legal and will yield an alert prompt.

This works because behind the scenes the JavaScript compiler will process all function declarations first so they are available everywhere inside the scope they where declared.

The problem is that this behaviour differs between JavaScrit engine

Run this code in Firefox and Chrome

if (true) {
  function foo() {
    return "first";
  }
} else {
  function foo() {
    return "second";
  }
}
foo();

Firefox returns first while Chrome returns second

It seems that on Chrome declarative functions with the same name overwrite previous ones

To solve this problem you should use function expressions as they are not affected by this problem

var foo;
if (true) {
  foo = function () {
    return "first";
  }
} else {
  foo = function() {
    return "second";
  }
}
foo();

Because we use anonymous functions there is no way they are overwritten and will have the same behaviour on all JavaScript engines.

Conclusion

So be on the safe side and avoid weird problems on the long run use function expressions to declare your functions