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

scope bug? catch (e) "e already defined"

Expand Messages
  • 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
    Message 1 of 7 , Jun 16, 2008
    View Source
    • 0 Attachment
      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
    • 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 2 of 7 , Jun 16, 2008
      View Source
      • 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 3 of 7 , Jun 16, 2008
        View Source
        • 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 4 of 7 , Jun 16, 2008
          View Source
          • 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 5 of 7 , Jun 16, 2008
            View Source
            • 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 6 of 7 , Jun 16, 2008
              View Source
              • 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 7 of 7 , Jun 16, 2008
                View Source
                • 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.