关于浏览器的兼容情况,可以访问can i use进行查询。
目前的主要方式还是通过使用Babel编译来解决兼容性问题。
我们目前使用Babel将ES6的代码兼容到了IE8,但这是在放弃某些新特性的条件下(例如export * from "xxx"等)。
let声明变量,可以说是具有作用域的var,用于声明变量,主要规则如下:
1、let声明的变量拥有块级作用域
{ let i=1; console.log(i);//1 } 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都是10 var 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