Loading ...
Sorry, an error occurred while loading the content.

Re: [jslint] scope bug? catch (e) "e already defined"

Expand Messages
  • Thomas Koch
    ... Hi Will, I ve another issue with already defined, which even appears in yui: if (typeof YAHOO == undefined || !YAHOO) { /** * The YAHOO global namespace
    Message 1 of 7 , Jun 16, 2008
    • 0 Attachment
      Am Montag 16 Juni 2008 18:15:52 schrieb wleingang:
      > Hi. Has anyone run into this before?
      >
      > try {
      > this.var1 = "test";
      > }catch (e) {}
      >
      > try {
      > this.var2 = "test";
      > }catch (e) {}
      >
      >
      > On the second catch, JSLint thinks that e is already defined... even
      > though from that scope there is no way it is already defined. Unless I
      > don't understand this should be valid code right?
      >
      > Thanks.
      > Will

      Hi Will,

      I've another issue with already defined, which even appears in yui:

      if (typeof YAHOO == "undefined" || !YAHOO) {
      /**
      * The YAHOO global namespace object. If YAHOO is already defined, the
      * existing YAHOO object will not be overwritten so that defined
      * namespaces are preserved.
      * @class YAHOO
      * @static
      */
      var YAHOO = {};
      }

      taken from yuiloader-beta.js, line 64.

      It would be nice, if I could use this pattern without having Jslint
      complaining.


      Best regards,
      --
      Thomas Koch, Software Developer
      http://www.koch.ro

      Young Media Concepts GmbH
      Sonnenstr. 4
      CH-8280 Kreuzlingen
      Switzerland

      Tel +41 (0)71 / 508 24 86
      Fax +41 (0)71 / 560 53 89
      Mobile +49 (0)170 / 753 89 16
      Web www.ymc.ch
    • wleingang
      ... defined, the ... I had the same problem. I ended up replacing those namespace declarations in each individual file with /*global YAHOO*/ I agree that if
      Message 2 of 7 , Jun 16, 2008
      • 0 Attachment
        --- In jslint_com@yahoogroups.com, Thomas Koch <thomas@...> wrote:
        > I've another issue with already defined, which even appears in yui:
        >
        > if (typeof YAHOO == "undefined" || !YAHOO) {
        > /**
        > * The YAHOO global namespace object. If YAHOO is already
        defined, the
        > * existing YAHOO object will not be overwritten so that defined
        > * namespaces are preserved.
        > * @class YAHOO
        > * @static
        > */
        > var YAHOO = {};
        > }
        >
        > taken from yuiloader-beta.js, line 64.
        >
        > It would be nice, if I could use this pattern without having Jslint
        > complaining.

        I had the same problem. I ended up replacing those namespace
        declarations in each individual file with /*global YAHOO*/

        I agree that if you are checking for its existance before defining
        it, then it shouldn't complain... but I am not sure where a syntax
        checker leaves off and a compiler takes over.

        Will
      • Douglas Crockford
        ... There are scope definition problems with respect to catch in some browsers. I recommend that you give each catch its own name (e1, e2) to be safe.
        Message 3 of 7 , Jun 16, 2008
        • 0 Attachment
          --- In jslint_com@yahoogroups.com, "wleingang" <wleingang@...> wrote:
          >
          > Hi. Has anyone run into this before?
          >
          > try {
          > this.var1 = "test";
          > }catch (e) {}
          >
          > try {
          > this.var2 = "test";
          > }catch (e) {}
          >
          >
          > On the second catch, JSLint thinks that e is already defined... even
          > though from that scope there is no way it is already defined. Unless I
          > don't understand this should be valid code right?

          There are scope definition problems with respect to catch in some
          browsers. I recommend that you give each catch its own name (e1, e2)
          to be safe.
        • Re Miya
          ... Unless I ... This is what I have done. Use different names for the events. However I have stuck into another problem: var test = function(){
          Message 4 of 7 , Jun 16, 2008
          • 0 Attachment
            --- In jslint_com@yahoogroups.com, "Douglas Crockford" <douglas@...>
            wrote:
            >
            > --- In jslint_com@yahoogroups.com, "wleingang" <wleingang@> wrote:
            > >
            > > Hi. Has anyone run into this before?
            > >
            > > try {
            > > this.var1 = "test";
            > > }catch (e) {}
            > >
            > > try {
            > > this.var2 = "test";
            > > }catch (e) {}
            > >
            > >
            > > On the second catch, JSLint thinks that e is already defined... even
            > > though from that scope there is no way it is already defined.
            Unless I
            > > don't understand this should be valid code right?
            >
            > There are scope definition problems with respect to catch in some
            > browsers. I recommend that you give each catch its own name (e1, e2)
            > to be safe.
            >
            This is what I have done. Use different names for the events.

            However I have stuck into another problem:

            var test = function(){
            this.pub_function = function(){
            pvt_fn();
            }
            var pvt_fn = function(){
            // Code here
            }
            }

            JsLint reports pvt_fn as a global reference. Is this normal?
          • Douglas Crockford
            ... Move the definition of pvt_fn before the pub_function that uses it.
            Message 5 of 7 , Jun 16, 2008
            • 0 Attachment
              --- In jslint_com@yahoogroups.com, "Re Miya" <remiya_ws@...> wrote:
              > However I have stuck into another problem:
              >
              > var test = function(){
              > this.pub_function = function(){
              > pvt_fn();
              > }
              > var pvt_fn = function(){
              > // Code here
              > }
              > }
              >
              > JsLint reports pvt_fn as a global reference. Is this normal?

              Move the definition of pvt_fn before the pub_function that uses it.
            • Re Miya
              ... That really makes sense. Up to now I have been putting the private fns at the end like this var test = function(){ this.pub_function = function(){
              Message 6 of 7 , Jun 16, 2008
              • 0 Attachment
                --- In jslint_com@yahoogroups.com, "Douglas Crockford" <douglas@...>
                wrote:
                >
                > --- In jslint_com@yahoogroups.com, "Re Miya" <remiya_ws@> wrote:
                > > However I have stuck into another problem:
                > >
                > > var test = function(){
                > > this.pub_function = function(){
                > > pvt_fn();
                > > }
                > > var pvt_fn = function(){
                > > // Code here
                > > }
                > > }
                > >
                > > JsLint reports pvt_fn as a global reference. Is this normal?
                >
                > Move the definition of pvt_fn before the pub_function that uses it.
                >
                That really makes sense.
                Up to now I have been putting the private fns at the end like this
                var test = function(){
                this.pub_function = function(){
                pvt_fn();
                }
                //------------ PRIVATE METHODS -----------//
                var pvt_fn = function(){
                // Code here
                }
                }
                Now I will put them at the top

                var test = function(){
                //------------ PRIVATE METHODS -----------//
                var pvt_fn = function(){
                // Code here
                }

                //------------ PUBLIC METHODS -----------//
                this.pub_function = function(){
                pvt_fn();
                }
                }

                Thank you!
              Your message has been successfully submitted and would be delivered to recipients shortly.