Saturday, May 30, 2009

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

myFunction()
and
window.myFunction

are not necessarily the same. the first one will look up the scope
chain and use the first ocurrence, it doesn't go directly to the
window object.

var x = 3;
(function(){
var x = 5;
alert(x);
})();
alert(x);

Again, this is basic javascript, I'll stop here. There are plenty of
resources on this matter around, including a lenghty discussion here
on the list, Brian should take a look at that.

cheers
-- ricardo

On May 30, 1:25 pm, MorningZ <morni...@gmail.com> wrote:
> 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: