箭头函数与普通函数的区别

本文探讨了箭头函数在JavaScript中的优势,如简洁表达式、隐式返回值,以及其特有的this指向规则。同时,指出了箭头函数不能作为构造函数和原型对象的局限。通过实例说明了如何避免回调函数的this混乱,并列举了相关应用场景和技巧。
摘要由CSDN通过智能技术生成

箭头函数更加简洁,隐式返回值

const isEven = n => n % 2 === 0;
const square = n => n * n;	

简化回调函数

// 正常函数写法
[1,2,3].map(function (x) {
  return x * x;
});
 
// 箭头函数写法
[1,2,3].map(x => x * x); //[1,4,9]

没有自己的this

(1)普通函数,谁调用它,this就指向谁。
(2)箭头函数,在哪里定义函数,this就指向谁,箭头函数的this实际是外层函数的this。
(3)下述例子中,箭头函数的this就是外层的sayName()函数的this,即obj对象。
例:
    <script type="text/javascript">
                let obj = {
                    name: "小明",
                    age: 12,
                    friends: 'xiaohong',
                    sayName() {
                        console.log(this)
                        console.log(this.name); //这里的this指向obj
                        // 使用普通函数,this指向会改变,在下面的定时器中指向window对象
                        setTimeout(function() {
                            console.log(this)
                            console.log(`我是${this.name}`)
                        }, 1000);

                        // 如果用箭头函数则没有上述问题,此时this指向obj
                        setTimeout(() => {
                            console.log(this);
                            console.log(this.name)
                        }, 1000)
                    }
                }
                obj.sayName()
            </script>

箭头函数不能当做构造函数

let foo=()=>{
}
var newFoo=new foo()//foo is not a construcotr

不存在arguement对象,如果要用,可以使用rest参数…解决

let C = (...c) => {
  console.log(c);
}
C(1,2,3,3)

箭头函数没有原型对象(prototype)

var foo = () => {  
    return 1  
}  
function bar(){  
    return 2;  
}  
console.log(foo.prototype)  //undefined  
console.log(bar.prototype)  // {constructor:f}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值