箭头函数的基本问题

箭头函数(arrow function):
     箭头函数是ES6之后增加的一种编写函数的方法,并且它比函数表达式要更加简洁
    箭头函数不会绑定this、arguments属性
    箭头函数不能作为构造函数来使用(不能和new一起来使用,会抛出错误)因为箭头函数中原型

箭头函数的编写: (): 函数的参数      {}: 函数的执行体
箭头函数的编写优化:
     优化一: 如果只有一个参数()可以省略,两个参数就不可以省略
     优化二: 如果函数执行体中只有一行代码, 那么可以省略大括号, 连同return一起省略,
     这行代码的结果会作为函数的返回值默认返回的
    优化三: 如果函数执行体只有返回一个对象, 那么需要给这个对象加上()

ES6箭头函数------this问题
    箭头函数不使用this的四种标准规则(也就是不绑定this),而是根据外层作用域来决定this
    模拟网络请求的案例:
    这里我使用setTimeout来模拟网络请求,请求到数据后如何可以存放到data中呢?
     我们需要拿到obj对象,设置data;
     但是直接拿到的this是window,我们需要在外层定义:var _this = this
     在setTimeout的回调函数中使用_this就代表了obj对象

var obj = {
            data: [],
            getData: function() {
                setTimeout(() => {
                    //模拟获取到的数据
                    var message = ["abc", "def", "jiy", "vhb"];
                    this.data.push(...message);
                }, 2000)
            }
        }

 

    之前的代码在ES6之前是我们最常用的方式,从ES6开始,我们会使用箭头函数
    为什么在setTimeout的回调函数中可以直接使用this呢?
 因为箭头函数并不绑定this对象,那么this引用就会从上层作用于中找到对应的this

//转到 
var obj = {
            data: [],
            getData: () => {
                setTimeout(() => {
                    console.log(this); //window
                }, 2000)
            }
        }

箭头函数是 ES6 引入的一种新的函数定义方式,使用 `=>` 符号定义,具有语法简洁、词法 `this` 绑定和隐式返回等特点,在回调函数、事件处理、立即执行函数和对象方法等场景中非常有用,能帮助开发者编写更简洁、更可靠的代码[^1]。 ### 基本语法 箭头函数基本语法根据参数数量和函数体的不同而有所变化: - **多参数,有函数体**:`const func = (参数) => { 函数体 };` - **单参数,有函数体**:单参数可省略括号,如 `const square = x => { return x * x; };` - **单参数,隐式返回**:可省略 `return` 和大括号,如 `const square = x => x * x;` - **无参数**:需要空括号,如 `const sayHello = () => "Hello World";` - **多参数,隐式返回**:多参数必须使用括号,如 `const add = (a, b) => a + b;` [^2] ### 特点 1. **语法简洁**:相较于传统函数,箭头函数的语法更加简洁,减少了代码量。例如传统函数 `function add(a, b) { return a + b; }`,使用箭头函数可以写成 `const add = (a, b) => a + b;` [^1][^2][^3] 2. **词法 `this` 绑定**:箭头函数没有自己的 `this`,它的 `this` 继承自外层函数,这避免了传统函数中 `this` 指向问题带来的困扰。 3. **隐式返回**:当箭头函数的函数体只有一条语句时,可以省略 `return` 关键字,该语句的执行结果会自动作为返回。例如 `const square = x => x * x;` 会自动返回 `x * x` 的结果 [^1][^2] 4. **参数获取**:可以在参数内以 `...args` 的方式获取输入的参数,得到的 `args` 是一个数组。例如: ```javascript const func = (...args) => { console.log(args); // [ 1, 2, 3 ] }; func(1, 2, 3); ``` [^4] ### 注意事项 1. **不能作为构造函数**:箭头函数不能使用 `new` 关键字来创建对象,因为它没有自己的 `this` 和 `prototype` [^5] 2. **不能用于需要动态 `this` 的对象方法**:由于箭头函数的 `this` 是词法绑定的,在需要动态 `this` 的场景中不适用 [^1][^5] 3. **没有 `arguments` 对象**:箭头函数没有自己的 `arguments` 对象,如果需要获取参数,可以使用剩余参数语法 `...args` [^4][^5] 4. **不支持 `yield`**:不能用作 Generator 函数 [^5] ### 示例代码 ```javascript // 基本示例 const multiply = (a, b) => a * b; console.log(multiply(3, 4)); // 输出: 12 // 使用剩余参数 const sumAll = (...numbers) => { return numbers.reduce((total, num) => total + num, 0); }; console.log(sumAll(1, 2, 3, 4)); // 输出: 10 ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值