ES6
一、严格模式
进入ES6的严格模式的方式:
<script type="module></script>//通过type
<script> "use strict"</sccript>//通过字符串
ES6中一些注意事项:
- 变量必须先声明后使用,声明方式为let和var。
- 严格模式下,this发生改变
var a=3;
function fn(){
// var a=4;
console.log(this);//普通函数中不能使用this,this不是window而是undefined,
console.log(this.a+a);
}
setTimeout(function(){
console.log(this);//回调函数中的this指向window
},500)
- 函数的参数不能有同名属性
function fn(a,a){conlost.log(a);}
fn(3,5);//普通模式下输出5,严格模式下报错
- 严格模式下,with语句报错,禁止使用
with(div.style){
width="50px";
height="50px";
backgroundColor="red";
}
- 只读属性修改报错
str.length=3;
- 不能使用八进制
- 不能删除不可删除属性
delete arr.length;
- eval不能被重新赋值且外部内容引用不到eval内部
for(var i=1;i<6;i++){
eval("obj"+i).a=i;
//实现var obj1={a:1};var obj2={a:2};....
}//将字符串反射为变量,且该变量必须存在于栈中
- eval和arguments不能被重新赋值
不能使用arguments.callee 和arguments.callee.caller
这两个一般用于匿名函数,所以减少匿名函数的使用 - 不能使用fn.caller和fn.arguments获取函数调用的堆栈
- 增加的保留字
二、let和const
let
var和let都是定义变量。
- let定义变量,不再作为window的属性使用。
let a=3;
this.a;window.a;//不存在
- let定义的变量只存在于{}内
if(true){
let i=3;
i++;
}
console.log(i);//报错
- let 先定义后使用,否则报错
let a=3;
function fn(){
console.log(a);//不能在定义之前使用
let a=4;
}
- let更突出作用域范围,只要有{}的内部的let定义都仅限于{}内部的局部变量。
const
- 常量的目的是不允许修改这个内容值,第一次被定义和被锁定写入
- 常量名是大写加_
const OBJ_A={a:1,b:2};
- 尽量不要使用常量定义引用类型,因为引用地址会改变
三、箭头函数
箭头函数的使用:
var fn=(a,b)=>{return a+b;}
等同于
var fn=function(a,b){
return a+b;
}
- 当参数只有一个时,箭头函数的()可以省略,当没有参数或者多个参数时,必须使用()
var fn=a=>{
a+=5;
return a;
}
var fn=()=>{
console.log("aaa");
}
- 如果箭头函数内语句只有一句,并且是return时,return和{}可以省略。多条语句不可省略。
var fn=(a,b)=> a+b;
3.当回调函数使用箭头函数时,函数内部的this仍然指向函数外部this,不因回调改变this指向。