Saturday, May 30, 2009

[jQuery] Re: calling functions between multiple document ready events

No, because if you say

<script type="text/javascript">
function MyFunctionThatAdds(x, y) {
..........
}
</script>

that *technically* attaches that function to the "window" object

so saying

var sum = MyFunctionThatAdds(3, 4);
alert(sum);

is the same as saying

var sum = window.MyFunctionThatAdds(3, 4);
alert(sum);

which is also the same as

window.sum = window.MyFunctionThatAdds(3, 4);
alert(window.sum);


Working example (all 3 will result in "7"):
http://paste.pocoo.org/show/119909/


So keeping that in mind, saying:

var MZ = {};
MZ.MyFunction = function(x, y) {
return x + 7;
}

i get the same results for:

alert(MZ.MyFunction(3,4));
and
alert(window.MZ.MyFunction(3,4));

as for "global functions are bad", i would agree with that if they are
used unnecessarily and in excess, but sometimes one wants common
functionality no matter where they are in the code

On May 30, 10:49 am, waseem sabjee <waseemsab...@gmail.com> wrote:
> so is namespace faking bad ?
>
> On Sat, May 30, 2009 at 4:19 PM, Ricardo <ricardob...@gmail.com> wrote:
>
> > Because you're creating a global variable, and global vars are evil :)
> > Same reason why you don't want to pollute the jQuery namespace.
>
> > On May 30, 1:27 am, MorningZ <morni...@gmail.com> wrote:
> > > "If i make a custom function my site uses a lot. i put it in a
> > > plugin. :) "
>
> > > Why not fake a namespace instead?
>
> > > like if you had
>
> > > function toUpperCase() {
> > >    //your custom "to upper case" code that
> > >    //would conflict with JS's verion
>
> > > }
>
> > > simply saying
>
> > > var waseem = {};
> > > waseem.toUpperCase = function() {
> > >    //your custom "to upper case" code that
> > >    //would no longerconflict with JS's verion
>
> > > }
>
> > > would solve the issue....
>
> > > back on topic, i haven't seen anyone suggest that the original code
>
> > > $(function(){
> > >    function displayMessage(){ alert('hello world'); };});
>
> > > $(function(){
> > >   displayMessage();
>
> > > });
>
> > > be written like
>
> > > function displayMessage(){ alert('hello world'); };
>
> > > $(function(){
> > >   displayMessage();});
>
> > > $(function(){
> > >   displayMessage();
>
> > > }
> > > });
>
> > > which makes a lot of sense, and is a super simple change

No comments: