// 参数
// 函数传参,结构赋值
// function fn({a,b,c}) {
// console.log(a); // 1
// console.log(b); // 2
// console.log(c); // 3
// }
// fn({a:1,b:2,c:3});
// 参数默认值,注意:有默认值的参数放到后面
// function fn({a,b=2,c=3}) {
// console.log(a); // 1
// console.log(b); // 2
// console.log(c); // 3
// }
// fn({a:1});
// function fn({a,b=2,c=3}) {
// console.log(a); // 1
// console.log(b); // 4
// console.log(c); // 5
// }
// fn({a:1,b:4,c:5});
// 函数 length 属性 返回函数形参个数 实参个数由 arguments 类数组记录
// function fn() {}
// console.log(fn.length); // 0
// function fn(a,b) {
// console.log(arguments.length); // 3
// }
// fn(1, 2, 3);
// console.log(fn.length); // 2,fn.length 记录的是函数形参的个数
// 函数作用域
// 当函数的形参有默认值时
// let a = 1;
// function fn(a, b=a) {
// console.log(b); // 1
// }
// fn(1);
// let a = 1;
// function fn(b=a) {
// let a=3;
// console.log(b); // 1
// }
// fn();// let a = 1;
// let a=2;
// function fn(a, b=function(){a=3}) {
// var a=4;
// b();
// console.log(a); // 4
// }
// fn();
// console.log(a); // 2
// let a=2;
// function fn(a, b=function(){a=3}) {
// a=4;
// b();
// console.log(a); // 3
// }
// fn();
// console.log(a); // 2
// rest参数 用来接收多余实参 注:rest参数必须写在最后一个
// function fn(a,b,...args) {
// console.log(arguments.length); // 6
// // let arr = [].slice.apply({}, arguments);
// // console.log(arr)
// console.log(a); // 1
// console.log(b); // 2
// console.log(args);
// args.push(7);
// console.log(args);
// }
// fn(1,2,3,4,5,6)
// 函数 name
// function fn() {}
// console.log(fn.name); // fn
// let fn = function() {}
// console.log(f.name); // fn
// let f = function fn() {}
// console.log(f.name); // fn
// 箭头函数
// es5
// let f = function() {
// return 1;
// }
// console.log(f()); // 1
// es6 箭头函数
// demo1
// let fn = () => 1; // ()代表函数接收的参数,1代表返回值
// console.log(fn()); // 1
// let fn = function(a) {
// return ++a;
// }
// console.log(fn(10));
// let fn = a => ++a;
// console.log(fn(10)); // 11
// let a = 10;
// let fn = function(a) {
// let b = 5;
// a += b;
// return a;
// }
// console.log(fn(a)); // 15
// let a = 10;
// let fn = a => {
// let b = 5;
// a += b;
// return a;
// }
// console.log(fn(a)); // 15
// let add = (a,b) => a+b;
// console.log(add(5,10)); // 15
// 箭头函数使用注意事项
// () => {}
// 1.如果只有一个参数,()可以省
// 2.如果只有一个return,{}可以省
// 3、箭头函数内部 this 指向由定义,被固定指向父级作用域
// 4、不能用来作为构造函数
// 5、没有 arguments,如果一定要用 arguments,可使用 rest 参数代替
// var num = 1;
// function fn() {
// var num = 2;
// setTimeout(() => console.log(this.num), 1000); // 1
// }
// fn();
// var num = 1;
// function fn() {
// var that = this;
// console.log(that); // [object Window]
// var num = 2;
// setTimeout(function() {
// console.log(that.num); // 1
// }, 1000);
// }
// fn();
// var num = 1;
// function fn() {
// var num = 5;
// setTimeout(() => console.log(this.num), 1000); // 8
// }
// fn.call({num: 8});
// let fn = () => console.log(this); // [object Window]
// fn.call({});
// var fn = function() {
// console.log(this); // [object Object]
// }
// fn.call({});
console