标签:开始 console err 形式 ++ var 同名 影响 i++
es6新增了let命令,用于声明变量,与var用法类似,但是使用let声明变量只在它所在的块内有效,而var则是定义的全局变量
{ let a=10; var b=1; } a //a is not defined,外部的a不能访问到上面块中定义的a变量 b //1
//使用var会发生变量提升,当脚本开始运行使用var命令声明的变量已经存在 console.log(foo); //undefined var foo=2; console.log(foo); //报错ReferenceError let foo=2; //使用let声明,声明的变量一定要在声明之后使用,否则会报错
let不允许在相同作用域内重复声明同一个变量
//报错 function(){ let a=10; var a=1; //let a=3; }
const用于声明常量,并且该常量那个是只读常量,一旦声明该常量就不能被更改
const a=1; a //1 a=2; //报错
并且const只声明,不赋值也会报错。
const a; //报错
const变量和let一样只能在声明之后使用,并且命令生命的变量也不会提升,同样也不可以重复声明。
const的常量不能够更改实质上并不是变量的额值不能更改,而是变量指向的内存地址不能变动。
es5只有全局作用域和函数作用域,但是没有块级作用域。
for(var i=0;i<10;i++){ console.log(i) } console.log("外部"+i) 初出结果: 1 2 3 4 5 6 7 8 9 外部10
可以看出外部的i会受到循环体中i的影响,如果使用let就会有块级作用域,最后就会显示,外部i不能找到就会报错。
在块级作用域中,外层作用域不能访问内层作用域的变量,,但是内层作用域可以定义外层作用域的同名变量。
function example(){ let n=5; if(true){ let n=10; //内层作用域可以和外层作用域声明同名变量 } console.log(n); //5,外层作用域不会受到内层作用域的影响 }
在es5中规定,函数只能在顶层作用域和函数作用域之中声明,不能再块级作用域中声明。
但是es6有所改变:
//函数声明语句 { let a="test" function(){ return a; } } //函数表达式 { let a="test"; let f=function(){ return a; }; } //并且块级作用域一定要有大括号,才能声明函数
标签:开始 console err 形式 ++ var 同名 影响 i++
原文地址:https://www.cnblogs.com/zzzha/p/9435790.html