To 'this' or not to 'this'?
First and foremost:


  Anyway, should performance be always the top priority?


Definitely not.  Don't write things that are needlessly unperformant, but only be overly concerned with performance when you have a reason to be.  Most of the time JS execution time is irrelevant, because you're waiting for user interaction, or for a network request, or something else that makes the execution time of the JS pretty unimportant.  

I'd be more concerned with writing code that's clear, expressive, and maintainable than performant.  



Regarding your usage of this, though, you definitely shouldn't be using this as you are in the first example.  You're leaking into the global scope.  When addg is run, what is this?  If you were calling obj.addg(), this would be obj, but since you're just calling addg(), this is the global scope A.K.A. window (in the browser).

With your first version if you run this in your console you'll see:

addg(); 
//undefined
addToCollection;
//function!  Whoops


That's not what you want.  You don't need to assign the internal addToCollection function anywhere, so don't.



An add function is a bit pointless.  You're adding undefined to the array of numbers in the () case, then adding special logic to exclude it from the sum, later, but instead you should just not add undefined at all.  Only do numbers.push(val) if typeof val === 'number'.

But, then, do you really need to keep an array of numbers at all?