es6中箭头函数用法

本文详细介绍了JavaScript中箭头函数的基本语法及其与传统函数表达式的区别,重点解释了箭头函数中this关键字的行为特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

箭头函数表达式的语法比函数表达式更短,并且没有自己的this,arguments,super或 new.target。这些函数表达式更适用于那些本来需要匿名函数的地方,并且它们不能用作构造函数。

第一种情况:形参的情况,没有形参的时候()不能省略

let fun = ()=>console.log("箭头函数")
fun()

相当于es5中

var fun = function(){
    console.log("箭头函数")
}
fun()

第二种情况:只有一个形参的时候,()可以省略

1.let fun2 = a=>console.log(a)
fun2(100)

2.let fun2 = (a)=>console.log(a)
fun2(100)

第三种情况:两个以及两个以上的形参的时候()不能省略

let fun3 = (a,b)=>console.log(a,b)

fun3(10,20)

第四种函数体内的情况,函数体内只有一条语句或者是表达式{}可以省略

let fun4 = (a,b)=>console.log(a,b)
fun4("你好","世界")

第五种函数体内的情况,内部执行了return 语句不可以加{}自动返回,如果加了{}就必须手动返回return

let fun5 = (a,b)=> return a+b
console.log(fun5(1,2))

let fun5 = (a,b)=> {
            return a+b
        }
console.log(fun5(1,2)

第五种函数不止一条语句或者是表达式的情况{}不可以省略

let fun6 = (a,b)=>{
    console.log(a,b)
    return a+b
}
fun6 (10,20)

关于箭头函数中的this问题,
普通函数中的this:
this指向的是执行环境中的this
箭头函数中的this
我们要认识到箭头函数中没有自己的this,它是继承下来,默认的指向在定义它所在的对象,而不是执行的对象。没有找到对象,默认执行window
那么我们来看下以下几种情景:
HTML

        <button id="btn1">按钮1</button>
        <button id="btn2">按钮2</button>

javascript

let btn1 = document.getElementById("btn1")
let btn2 = document.getElementById("btn2")
let obj = {
        getAcion:function(){
                console.log(this) //第一行 this=>obj
                btn2.onclick =()=>{
                    console.log(this)//第二行 this=>obj
                }
            }
        }
        obj.getName()

我们来思考以上这上面的代码,我们在”第一行”输出的this是obj这个应该没有问题吧。那么在箭头函数中定义的是没有自己this,它只能是继承下来,那么”第二行”中的this就继承了第一行的this,所以指向的obj

let btn1 = document.getElementById("btn1")
let btn2 = document.getElementById("btn2")
let obj = {
        getAcion:()=>{
                console.log(this) //第三行 this=>window
                btn2.onclick =()=>{
                    console.log(this)//第四行 this=>widown
                }
            }
        }
        obj.getName()

我们来看下以上的代码,这个getAcion变成了一个箭头函数,同理它没有自己的this,只能向上找,它并没有找到function这种单独的作用域,那么这个时候它的this指向的就是window,在”第四行”就继承了”第三行”的this,所以这个时候this=>window。

那么我们现在来看下,网上比较流行的版本和案例:

//定义一个对象
    var obj = {
        x:100,//属性x
        show(){
            //延迟500毫秒,输出x的值
            console.log(this) //第五行 this=>obj
            setTimeout(
               //不同处:箭头函数
               () => { console.log(this.x)}, 第六行 this=>obj
               500
            );
        }
    };
    obj.show();//打印结果:100

在show函数中套用了一个定时器,如果是普通的匿名函数,”第六行”的this=>就是window,但是这个时候它是一个箭头函数,那么这个时候”第六行”的this就继承下来,这个时候this就是obj

OK,总结一下,箭头函数中的this原本是不存在的,它是通过继承方式过来,这个是我个人的一种理解,到目前为止,都还没错过。如果有问题或者有不同的意见或者留言。谢谢。

ES6中引入的箭头函数(arrow function)与传统的普通函数(regular function)之间存在多个关键区别,这些差异不仅影响代码的可读性,还对功能行为产生重要影响。 1. **语法** 箭头函数使用一种更为简洁的语法形式。例如,一个简单的函数可以写成 `(x) => x * 2`,而等效的普通函数则为 `function(x) { return x * 2; }`。这种简化的语法使得代码更易于阅读和编写[^2]。 2. **this 的绑定** 箭头函数不会创建自己的 `this` 上下文,它继承自外围作用域。这意味着,在箭头函数内部使用的 `this` 实际上引用的是外部作用域中的 `this` 值。相比之下,普通函数会在调用创建一个新的 `this` 上下文,这通常取决于函数是如何被调用的。这一特性使箭头函数非常适合用于回调函数,尤其是在需要访问外部 `this` 的情况下。 3. **arguments 对象** 箭头函数不拥有自己的 `arguments` 对象,如果需要获取参数列表,可以使用 rest 参数替代。而在普通函数中,可以通过 `arguments` 对象来访问传递给函数的所有参数。 4. **作为构造器的能力** 箭头函数不能用作构造器,即不能通过 `new` 关键字实例化一个对象。尝试这样做会导致运行错误。相反,普通函数可以通过 `new` 被用来创建新的对象实例。 5. **原型属性** 普通函数自动获得一个 `prototype` 属性,该属性指向函数的原型对象;然而,箭头函数没有自己的 `prototype` 属性,因为它们不可作为构造函数使用。 6. **生成器函数** 只有普通函数能够成为生成器函数,通过在函数定义前加上 `*` 符号,并利用 `yield` 关键字产出值。箭头函数无法以这种方式定义生成器。 7. **方法简写** 在对象字面量中定义方法,普通函数允许使用简短的形式:`method() {}`。尽管箭头函数也可以分配给对象属性以实现类似效果,但它们并不具备相同的方法简写形式。 了解这些区别有助于开发者根据具体需求选择合适的函数类型,特别是在处理异步操作、事件监听以及React等框架中的组件逻辑尤为重要。对于不需要自身 `this` 上下文或构造能力的情况,推荐使用箭头函数以获得更加简洁明了的代码结构。 ```javascript // 示例 - 箭头函数 const multiplyByTwo = (x) => x * 2; console.log(multiplyByTwo(5)); // 输出: 10 // 示例 - 普通函数 function multiplyByThree(x) { return x * 3; } console.log(multiplyByThree(5)); // 输出: 15 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值