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

Re: Tolerate misordered definitions

Expand Messages
  • Douglas Crockford
    ... My point was that you should fix your code. Misordered definitions are one thing, but you are trying to capture variables that haven t even been defined
    Message 1 of 10 , Jun 28, 2011
    • 0 Attachment
      --- In jslint_com@yahoogroups.com, "chriskennish" <chris@...> wrote:

      > I'm not sure I understand. I realise that I can "fix" my code by changing the order of the variable declarations, but that is not my point. My point is that the "Tolerate misordered definitions" doesn't allow for this case.


      My point was that you should fix your code. Misordered definitions are one thing, but you are trying to capture variables that haven't even been defined yet. That is certainly making the program difficult to read and understand. It is intolerable.
    • Erik Eckhardt
      I *think* Tolerate misordered definitions is only for the form: var fn = function() { ___fn(); } Not to actually use fn before it is declared. Perhaps
      Message 2 of 10 , Jun 28, 2011
      • 0 Attachment
        I *think* "Tolerate misordered definitions" is only for the form:

        var fn = function() {
        ___fn();
        }

        Not to actually use fn before it is declared. Perhaps someone will correct
        me if I am wrong.

        On Tue, Jun 28, 2011 at 2:14 PM, Douglas Crockford <douglas@...>wrote:

        > **
        >
        >
        > --- In jslint_com@yahoogroups.com, "chriskennish" <chris@...> wrote:
        >
        > > I'm not sure I understand. I realise that I can "fix" my code by changing
        > the order of the variable declarations, but that is not my point. My point
        > is that the "Tolerate misordered definitions" doesn't allow for this case.
        >
        > My point was that you should fix your code. Misordered definitions are one
        > thing, but you are trying to capture variables that haven't even been
        > defined yet. That is certainly making the program difficult to read and
        > understand. It is intolerable.
        >
        >
        >


        [Non-text portions of this message have been removed]
      • chriskennish
        Let s look at this another way. Without Tolerate misordered definitions , we get the following: //Example 1 var abc = def(), def = function () {}; // Problem
        Message 3 of 10 , Jun 29, 2011
        • 0 Attachment
          Let's look at this another way. Without "Tolerate misordered definitions", we get the following:

          //Example 1
          var abc = def(),
          def = function () {};

          // Problem at line 1 character 11:
          // 'def' was used before it was defined.

          //Example 2
          var hij = function () {
          klm();
          },
          klm = function () {};

          // Problem at line 2 character 5:
          // 'klm' was used before it was defined.
          // Undefined variable: klm 1 'hij'

          Why the extra "Undefined variable" error in example 2? If it was used before it was defined, it can't also be undefined, can it?


          --- In jslint_com@yahoogroups.com, Erik Eckhardt <erik@...> wrote:
          >
          > I *think* "Tolerate misordered definitions" is only for the form:
          >
          > var fn = function() {
          > ___fn();
          > }
          >
          > Not to actually use fn before it is declared. Perhaps someone will correct
          > me if I am wrong.
          >
          > On Tue, Jun 28, 2011 at 2:14 PM, Douglas Crockford <douglas@...>wrote:
          >
          > > **
          > >
          > >
          > > --- In jslint_com@yahoogroups.com, "chriskennish" <chris@> wrote:
          > >
          > > > I'm not sure I understand. I realise that I can "fix" my code by changing
          > > the order of the variable declarations, but that is not my point. My point
          > > is that the "Tolerate misordered definitions" doesn't allow for this case.
          > >
          > > My point was that you should fix your code. Misordered definitions are one
          > > thing, but you are trying to capture variables that haven't even been
          > > defined yet. That is certainly making the program difficult to read and
          > > understand. It is intolerable.
          > >
          > >
          > >
          >
          >
          > [Non-text portions of this message have been removed]
          >
        • Robert Sauer-Ernst
          well var fn = function () { use strict ; fn(); }; passes without error and without options ... Von: Erik Eckhardt Am: Tue, 28 Jun 2011
          Message 4 of 10 , Jun 29, 2011
          • 0 Attachment
            well

            var fn = function () {
            "use strict";
            fn();
            };

            passes without error and without options

            --- Original Nachricht ---

            Von: Erik Eckhardt <erik@...>
            Am: Tue, 28 Jun 2011 14:27:33 -0700
            Betreff: Re: [jslint] Re: Tolerate misordered definitions
            An: jslint_com@yahoogroups.com
            CC:
            > var fn = function() {
            > ___fn();
            > }
            >
          • douglascrockford
            ... I went to some trouble to specifically allow that case. I now think it was a mistake. The correct way to write a recursive function is var fn = function
            Message 5 of 10 , Jun 29, 2011
            • 0 Attachment
              --- In jslint_com@yahoogroups.com, Robert Sauer-Ernst <facebook@...> wrote:

              > var fn = function () {
              > "use strict";
              > fn();
              > };

              I went to some trouble to specifically allow that case. I now think it was a mistake. The correct way to write a recursive function is

              var fn = function fn() {

              or simply

              function fn() {
            • chriskennish
              After a bit more digging, I think I ve got the heart of it, and it s far simpler than I first imagined. The problem, as I see it, is as follows. This code:
              Message 6 of 10 , Jun 29, 2011
              • 0 Attachment
                After a bit more digging, I think I've got the heart of it, and it's far simpler than I first imagined. The problem, as I see it, is as follows. This code:

                var a = function () {
                "use strict";
                b();
                };

                Rightly generates an error:
                "Problem at line 3 character 5: 'b' was used before it was defined.
                Undefined variable: b 1 'a'"

                My confusion lay in that I assumed that this "before it was defined" error was dependent on the variable being defined later. I now realise that this wording is used even if the variable is never defined. It seems to me that we should get one error or the other, but not both: either "undefined", or "not defined yet", which could *then* be misorder-tolerated (or not) as the case may be.


                --- In jslint_com@yahoogroups.com, "chriskennish" <chris@...> wrote:
                >
                > Let's look at this another way. Without "Tolerate misordered definitions", we get the following:
                >
                > //Example 1
                > var abc = def(),
                > def = function () {};
                >
                > // Problem at line 1 character 11:
                > // 'def' was used before it was defined.
                >
                > //Example 2
                > var hij = function () {
                > klm();
                > },
                > klm = function () {};
                >
                > // Problem at line 2 character 5:
                > // 'klm' was used before it was defined.
                > // Undefined variable: klm 1 'hij'
                >
                > Why the extra "Undefined variable" error in example 2? If it was used before it was defined, it can't also be undefined, can it?
                >
                >
                > --- In jslint_com@yahoogroups.com, Erik Eckhardt <erik@> wrote:
                > >
                > > I *think* "Tolerate misordered definitions" is only for the form:
                > >
                > > var fn = function() {
                > > ___fn();
                > > }
                > >
                > > Not to actually use fn before it is declared. Perhaps someone will correct
                > > me if I am wrong.
                > >
                > > On Tue, Jun 28, 2011 at 2:14 PM, Douglas Crockford <douglas@>wrote:
                > >
                > > > **
                > > >
                > > >
                > > > --- In jslint_com@yahoogroups.com, "chriskennish" <chris@> wrote:
                > > >
                > > > > I'm not sure I understand. I realise that I can "fix" my code by changing
                > > > the order of the variable declarations, but that is not my point. My point
                > > > is that the "Tolerate misordered definitions" doesn't allow for this case.
                > > >
                > > > My point was that you should fix your code. Misordered definitions are one
                > > > thing, but you are trying to capture variables that haven't even been
                > > > defined yet. That is certainly making the program difficult to read and
                > > > understand. It is intolerable.
                > > >
                > > >
                > > >
                > >
                > >
                > > [Non-text portions of this message have been removed]
                > >
                >
              • Luke Page
                It would be useful to have 2 error messages if possible.. or at least change wording as I ve seen people think they can ignore it because it isn t a more harsh
                Message 7 of 10 , Jun 29, 2011
                • 0 Attachment
                  It would be useful to have 2 error messages if possible.. or at least change
                  wording as I've seen people think they can ignore it because it isn't a more
                  harsh variable undefined...
                  On 29 Jun 2011 20:39, "chriskennish" <chris@...> wrote:
                  > After a bit more digging, I think I've got the heart of it, and it's far
                  simpler than I first imagined. The problem, as I see it, is as follows. This
                  code:
                  >
                  > var a = function () {
                  > "use strict";
                  > b();
                  > };
                  >
                  > Rightly generates an error:
                  > "Problem at line 3 character 5: 'b' was used before it was defined.
                  > Undefined variable: b 1 'a'"
                  >
                  > My confusion lay in that I assumed that this "before it was defined" error
                  was dependent on the variable being defined later. I now realise that this
                  wording is used even if the variable is never defined. It seems to me that
                  we should get one error or the other, but not both: either "undefined", or
                  "not defined yet", which could *then* be misorder-tolerated (or not) as the
                  case may be.
                  >
                  >
                  > --- In jslint_com@yahoogroups.com, "chriskennish" <chris@...> wrote:
                  >>
                  >> Let's look at this another way. Without "Tolerate misordered
                  definitions", we get the following:
                  >>
                  >> //Example 1
                  >> var abc = def(),
                  >> def = function () {};
                  >>
                  >> // Problem at line 1 character 11:
                  >> // 'def' was used before it was defined.
                  >>
                  >> //Example 2
                  >> var hij = function () {
                  >> klm();
                  >> },
                  >> klm = function () {};
                  >>
                  >> // Problem at line 2 character 5:
                  >> // 'klm' was used before it was defined.
                  >> // Undefined variable: klm 1 'hij'
                  >>
                  >> Why the extra "Undefined variable" error in example 2? If it was used
                  before it was defined, it can't also be undefined, can it?
                  >>
                  >>
                  >> --- In jslint_com@yahoogroups.com, Erik Eckhardt <erik@> wrote:
                  >> >
                  >> > I *think* "Tolerate misordered definitions" is only for the form:
                  >> >
                  >> > var fn = function() {
                  >> > ___fn();
                  >> > }
                  >> >
                  >> > Not to actually use fn before it is declared. Perhaps someone will
                  correct
                  >> > me if I am wrong.
                  >> >
                  >> > On Tue, Jun 28, 2011 at 2:14 PM, Douglas Crockford <douglas@>wrote:
                  >> >
                  >> > > **
                  >> > >
                  >> > >
                  >> > > --- In jslint_com@yahoogroups.com, "chriskennish" <chris@> wrote:
                  >> > >
                  >> > > > I'm not sure I understand. I realise that I can "fix" my code by
                  changing
                  >> > > the order of the variable declarations, but that is not my point. My
                  point
                  >> > > is that the "Tolerate misordered definitions" doesn't allow for this
                  case.
                  >> > >
                  >> > > My point was that you should fix your code. Misordered definitions
                  are one
                  >> > > thing, but you are trying to capture variables that haven't even been
                  >> > > defined yet. That is certainly making the program difficult to read
                  and
                  >> > > understand. It is intolerable.
                  >> > >
                  >> > >
                  >> > >
                  >> >
                  >> >
                  >> > [Non-text portions of this message have been removed]
                  >> >
                  >>
                  >
                  >


                  [Non-text portions of this message have been removed]
                Your message has been successfully submitted and would be delivered to recipients shortly.