<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ES6 函数扩展</title>
</head>
<body>
<script type="text/javascript">
//函数扩展
function foo(a,b){
a=a||0;
b=b||0;
return a+b;
}
console.log(foo());
function foo1(a=0,b=0){//设置默认值
return a*b;
}
console.log(foo1(3,3));
function sum(...arg){
//console.log(arg);//arg变成了数组
let res=0;
arg.forEach(function(item){
res+=item;
});
return res;
}
console.log(sum(1,2,8));
//将第一个参数分离出来 第一个参数x后面几个参数的和
function sum1(n,...arg){
let res=0;
arg.forEach(function(item){
res+=item;
});
return n*res;
}
console.log(sum1(1,2,8));
//箭头函数不是为了替代function存在的 但是let是为了替代var存在的
let arrowFn=()=>{};
console.log([1,2,3].find((item,index,array)=>item>2));
//参数没有 参数入口 ()=>{}
let log=()=>{
console.log(123);
}
//参数只有一个 圆括号可以不写
let log1=msg=>{
console.log(msg);
}
//参数多个 同 参数没有情况 圆括号一定要写
let sum3=(a,b)=>{
console.log(a+b);
}
//关于语法块的大括号 只有一句话的时候就可以不写大括号
console.log([1,2,3,4].map(function(item){
return item*3
}).filter(function(item){
return item%2==0;
}));
console.log([1,2,3,4].map(item=>item*3).filter(item=>item%2==0));
//箭头函数this指向是固定的 绑定定义时所在的对象
function a(){
console.log(this);
}
let obj={a}
a();//window
obj.a();//obj fn
//函数this的指向是在方法执行时 离方法最近的对象
let a1=()=>{
console.log(this);
}
let obj1={a1}
a1();//window
obj1.a1();//window
a1.call(obj1);//window
//箭头函数不能当作构造函数使用 不能new
let f=()=>{
this.a=1;
}
f();
</script>
</body>
</html>