箭头函数以及声明特点
- 1 箭头函数的声明
- 2 箭头函数的特性
- 3 箭头函数实践
1 箭头函数的声明
- ES6允许使用箭头=>定义函数
	<script>
		// 声明一个函数
        // 原先
        let fn = function(a,b){
            return a + b;
        }
        // 现在
        let fn1 = (a,b) => {
            return a + b;
        }
        // 调用函数
        let result = fn1(1, 2);
        console.log(result);
	</script>

2 箭头函数的特性
- 1>this是静态的,this始终指向函数声明时所在作用域下的this的值
	<script>
		function getName(){
            console.log(this.name);
        }
        let getName2 = () => {
            console.log(this.name);
        }
        // 设置window对象的name属性
        window.name = '北大';
        const SCHOOL = {
            name: 'ATBeiDa'
        }
        // 直接调用
        getName();
        getName2();
        // call方法调用
        getName.call(SCHOOL); // 普通函数this指向调用者
        getName2.call(SCHOOL); // 箭头函数this是指高父级
	</script>

- 2>不能作为构造实例化对象
	<script>
		let Person = (name,age) => {
            this.name = name;
            this.age = age;
        }
        let me = new Person('xiao',30);
        console.log(me); // 会报错
	</script>

- 3>不能使用arguments(作用:保存实参)变量
	<script>
		let fn = () => {
            console.log(arguments);
        }
        fn(1,2,3); // 会报错
	</script>

- 4>箭头函数的简写,分两种情况
	<script>
		// 1> 省略小括号,当形参有且只有一个的时候
        /* let add = (n) => {
            return n + n;
        }
        console.log(add(9)); */
        let add = n => {
            return n + n;
        }
        console.log(add(9));
        // 2> 省略花括号,当代码体只有一条语句的时候,此时return必须省略,而且语句的执行结果就是函数的返回值
        /* let pow = (n) => {
            return n * n;
        }
        console.log(pow(9)); */
        /* let pow = (n) => n * n;
        console.log(pow(9)); */
        let pow = n => n * n;
        console.log(pow(9));
	</script>

3 箭头函数实践
- 案例一:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>箭头函数实践</title>
    <style>
        div {
            width: 200px;
            height: 200px;
            background: #58a;
        }
    </style>
</head>
<body>
    <div id="ad"></div>
    <script>
        // 需求一:点击div,2s后颜色变为粉色
        // 1.获取元素
        let ad = document.getElementById('ad');
        // 2.绑定事件
        ad.addEventListener('click',function(){
            // 保存this的值
            // let that = this; // 方法一
            // let _this = this; // 方法二
            // let self = this; // 方法三
            // 因为两秒后,所以需要加一个定时器
            /* setTimeout(function(){
                // 修改背景颜色 this
                // this.style.background = 'pink'; // 此时this指向有问题,2秒后不变色 解决方法一:保存this的值(如上) 解决方法二:使用箭头函数(如下)
                // that.style.background = 'pink';
                // _this.style.background = 'pink';
                // self.style.background = 'pink';
            },2000); */
            setTimeout(() => {
                this.style.background = 'pink';
            },2000);
        })
    </script>
</body>
</html>
- 案例二:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>箭头函数实践</title>
</head>
<body>
    <script>
        // 需求二:从数组中返回偶数的元素
        const arr = [1,6,9,10,100,25];
        // filter()函数用于过滤序列,过滤掉不符合条件的元素,接收两个参数,一个为函数,第二个为序列,每个元素作为参数传递给函数进行判断然后返回true或false,最后将返回true的元素放到新列表中
        // 方法一
        /* const result = arr.filter(function(item) {
            if(item % 2 === 0) {
                return true;
            }else {
                return false;
            }
        }); */
        // 方法二
        /* const result = arr.filter(item => {
            if(item % 2 === 0) {
                return true;
            }else {
                return false;
            }
        }); */
        // 方法三
        const result = arr.filter(item => item % 2 === 0);
        console.log(result);
    </script>
</body>
</html>

- 总结:箭头函数适合与this无关的回调(如:定时器、数组的方法回调)。箭头函数不适合与this有关的回调(如:dom元素的事件回调、对象的方法)。



















