关于浏览器的兼容情况,可以访问can i use进行查询。
目前的主要方式还是通过使用Babel编译来解决兼容性问题。
我们目前使用Babel将ES6的代码兼容到了IE8,但这是在放弃某些新特性的条件下(例如export * from “xxx”等)。
let声明变量,可以说是具有作用域的var,用于声明变量,主要规则如下:
1、let声明的变量拥有块级作用域
{
let i=1;
console.log(i);//
}
console.log(i);//Uncaught ReferenceError: i is not defined
2、同一作用域,let变量应该先声明再调用,同时不能重复声明
{
console.log(t1); // undefined
var t1 = "var声明的变量";
console.log(t2); // Uncaught ReferenceError: t2 is not defined
let t2 = "let声明的变量"
}
{
let t3 = "第一次声明";
console.log(t3); // 直接报错 Uncaught SyntaxError: Identifier 't3' has already been declared
let t3 = "第二次声明"
}
3、for循环中,let声明的变量在循环内部的独立作用域会形成对应的副本
var a=[];
for(var i=0;i<10;i++){
a[i] = fucntion(){
console.log('i的值='+i);
}
}
console.log(i);
a[6]();//i的值是10, 无论a[n],i都是10var a = [];
for (let i = 0; i < 10; i++) {
a[i] = function() {
console.log("i的值="+i);
};
}
// console.log(i) // 未定义 报错 Uncaught ReferenceError: i is not defined
a[6](); // i的值=6
const 声明静态变量,声明以后不能再修改,其他用法和let一样
const PI; //报错 Uncaught SyntaxError: Missing initializer in const declaration
const PI = 3.14; // 正确用法
PI = 3.1415; //报错,重复定义 Uncaught TypeError: Assignment to constant variable