console.log(f)//undefinedvar f =1;
console.log(g)//ReferenceError: g is not definedlet g =2;
console.log(h)//ReferenceError: g is not definedconst h =2;
var f =4;var f =5;
console.log(5)//5let g =6;let g =7;
console.log(7)//SyntaxError: Identifier 'g' has already been declaredconst h =8;const h =9;
console.log(h)//SyntaxError: Identifier 'g' has already been declared
4.是否存在块级作用域?
var不存在块级作用域。
let和const存在块级作用域。
什么是块级作用域:
ES5中作用域有:全局作用域、函数作用域。没有块作用域的概念。因此也有一系列的问题。
//1,内层变量可能覆盖外层变量的问题var a =2;functionfun(){
console.log(a)//undefinedif(false){var a =3;//变量提升带来的,尽管存在块级作用域,但是var声明的变量会跨越这个域。}}fun()//2,用来计数的循环变量泄露为全局变量。var s ='hello';for(var i =0; i < s.length; i++){
console.log(s[i]);}
console.log(i);// 5 i循环结束后,泄露成了全局变量
//1,解决内层变量可能覆盖外层变量的问题var b =2;functionfun1(){
console.log(b)//2 访问的外层变量if(false){let b =3;//不存在变量提升,变量存在于块级作用域之中。}}fun1()//2,解决用来计数的循环变量泄露为全局变量。var s1 ='hello';for(let j =0; j < s1.length; j++){
console.log(s1[j]);//j存在于块级作用域之中,和其绑定}
console.log(j);// 报错 j is not defined