Search code examples
javascriptnode.jsglobal-variables

Why let and const keyword variables are not allowed to redeclaration in JavaScript, where var keyword variable is allowed?


I know that variable redeclaration leads us to syntax error and it is illegal but JavaScript has it's own weird concept about redeclaration. please I need guidance about this stuff.

1).I am trying to understand this when we use var variable in JavaScript it can be redeclared. 2).The last assigned value will get updated to var identifier. 3).I went through some resources, i got that v8engine is not redeclaring var it is just assigning the latest value to same var identifier, ok up to know this is perfect. 4).If it so why the same flexibility of redeclaring not given to let and const keywords in JavaScript. 5).What is happening behind this complex stuff please explain me


Solution

  • The ability to re-declare a variable of the same name in the same scope is confusing to someone reading a script who's trying to understand it. If you declare a variable at a certain line in the code, and then later declare it again, it's very likely a typo or accident, since it doesn't make sense - if you want to reassign the variable, just reassign the variable without re-declaring it.

    function getName(name) {
      // What did the script-writer mean to do here?
      // Did they forget that there's an argument called name already?
      var name = prompt('What is your name?');
      console.log('hi', name);
    }
    getName();

    Re-declaring in the same scope is technically permitted with var, but that's only because that's how things have always worked since the very beginning; changing it to be illegal now would break backwards compatibility, which is not done.

    let and const were intentionally designed to not be re-declarable in order to avoid this sort of confusion. Less confusing code is arguably more important than flexibility. When language rules are too flexible, coding can become a lot harder. (see == for an example...)

    Even if it were possible, re-declaring a const variable in particular doesn't make any sense, because a const is, by definition, not reassignable.