Es6 block-level scope
es6 block-level scope let
Why not add the sentence "let a = 2000" in the following code, the console.log (a) result is 100; and why you report an error an after adding this sentence is the definition.
I came across the knowledge of let in es6.
var a = 100, b = 10;
function fun(){
if(true){
console.log(a);
let a = 2000;
}
}
fun();//
if var a = 200 is included in if, then the result of console.log (a) is why the program reported an error here after undefined, was changed to let?
There is a variable improvement in the use of
var, that is, when a variable is used, it is found in the scope. So in console.log (a), when looking for var a globally, after promotion, it is equivalent to var a; console.log (a);
let and const will not be promoted, that is, in console.log (a), let a comes after, which means that a has not yet been defined, so it is seen before undefined
https://codeshelper.com/a/11.
. You can take a look at the use of ES6.
because you use var
, you will have a variable that promotes var hoisting
, so you won't report an error.
Source code
function fun() {
if (true) {
console.log(a);
var a = 2000;
}
}
variable is equal to this after promotion
function fun() {
var a;
if (true) {
console.log(a);
a = 2000;
}
}
there is no such concept in let. Of course, if you quote an undefined variable, you will make a mistake.
temporary dead zone learn
there is no let output outside the global variable var a = 100
there is a temporary dead zone with let until let a = 2000; an is not defined
changing let to var, has a variable improvement, which is equivalent to the following code
1.<br>2.if,<br>3.varjs<strong></strong>
a:
:a > undefined
:a -> 100
fun :a -> undefined (var)
fun -> console.log(a) -> undefined
:a -> 2000