another question concerning javascricpt closures. I have a global “settings object”. Is it better to use it from within functions in global scope or pass the object every time a function needs to access the object?
For a better understanding a little mockup of the situation here
Please ignore that “baz()” also gets the passed object within “foobar()” from the global scope within the closure. You see that both versions work fine.
The thing is that I am passing whatever object the function needs to work to every function and EVERY time (unneccesary overhead?), which might be nice and easy to read/understand but I am seriously thinking about changing this. Disadvantage would be that I have to keep the “this” scope wherever it gets deeper right?
Thanks for your advice!
So you have basically three options:
Global variable approach
Well, I guess it’s a little bit like with any global variable. If settings is a singleton (for example it describes your application) and you can’t see any benefit in having a possibility to call the same function with different settings objects, then I don’t see why it couldn’t be a global variable.
That said, because of all the naming conflicts, in Javascript it’s good to “namespace” all the global variables. So instead of global variables
fooandbaryou should rather have one global variableMyGlobalNamespacewhich is an objects having attributes:MyGlobalNamespace.fooandMyGlobalNamespace.bar.Private variable approach
Having a private variable accessed by a closure is a good pattern for hiding implementation details. If the settings object is something you don’t want to expose as an API, this is probably the right choice.
Additional function parameter approach
Basically if you see a gain in having a possibility of supplying different settings to different function calls. Or perhaps if you can picture such gain in the future. Obvious choice if you have many instances of settings in your application.
EDIT
As to the question from the comments:
Example 1)
Example 2)
In a nutshell, I’d encourage you to read some good book on the fundamental concepts of Javascript. It has its paculiarities and it’s good to know them.