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

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

Expand Messages
  • 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 1 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 2 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 3 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 4 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 5 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.