I was wondering what states are kept between two lines of JavaScript code submitted to babel-node. My confusion arises because if you write two lines of code, you can override an variable definition without an error. For example, with babel-node --presets es2015, you can do:
> const a = 1;
undefined
> let a = 2;
undefined
Now if you write it in one line, you get an error:
> const a = 1; let a = 2;
TypeError: repl: Duplicate declaration "a"
...
It seems that in the first case, the state that a is defined as 1 (const variable assignment) is lost (yet not until the second assignment), while in the second case, it is maintained.
What causes the differences here? and which states are maintained?