一 变量类型
因为js是一个弱类型的语言,所以在以前使用时,我们只有一种声明方式,就是用var进行变量声明,es6对其进行了扩展,增加了let和const方式,所以,现在有了三种声明方式。
1. var 变量提升(函数声明和变量声明总是会被解释器悄悄地被“提升”到方法体的最顶部);
1 var a = 0; 2 { 3 var a = 1; 4 } 5 console.log(a);//--> a = 1
在变量a声明时,被自动提升到方法的最顶端,相当于
1 var a; 2 a = 0; 3 { 4 a = 1; 5 }
在循环中,如果使用var 声明变量。就会存在以下问题
1 for(var i=0;i<10;i++){ 2 console.log('循环中a的值为:'+i); 3 } 4 console.log('循环外a的值为:'+i);
可以看出循环外部a的值为10,由此可能会造成变量污染,为了防止这种情况,es6中出现局部变量。
2. let 局部声明;
顾名思义。就是在局部起作用的变量。
var a = 0; { let a = 1; console.log("内部的a为:"+a); } console.log("外部的a为:"+a);
可以看出此时外部的a的值为0,所以let声明的变量,只在其作用域内起作用。
for(let i=0;i<10;i++){ console.log('循环中a的值为:'+i); } console.log('循环外a的值为:'+i);
3. const 常量声明;
const为常量声明,其值一经声明,则不允许改变,否则会报错。
const a = 0; var a = 1; console.log(a)
此时将会报错