前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >es6箭头函数详解

es6箭头函数详解

作者头像
用户10106350
发布2022-10-28 11:02:12
2590
发布2022-10-28 11:02:12
举报
文章被收录于专栏:WflynnWebWflynnWeb
代码语言:javascript
复制
// 普通函数
let fun = function () {
    console.log('原始函数')
}
fun()

// 没有形参的时候
let fun1 = () => console.log('我是箭头函数')
fun1()

// 只有一个形参的时候,可以省略小括号
let fun2 = a => console.log(a)
fun2('我是a')

// 两个及两个以上
let fun3 = (x, y) => console.log(x, y)
fun3(30, 31)

// 函数体只有一条语句或者是表达式的时候,大括号{}可以省略
// 会自动返回语句执行的结果,或者是表达式的结果
let fun4 = (x, y) => x + y
fun4(30, 31)

// 函数体不止一条语句或者是表达式的时候,大括号{}不可以省略
let fun5 = (x, y) => {
    console.log(x, y)
    return x + y
}
fun5(30, 31)

箭头函数的this:

箭头函数没有自己的this,箭头函数的this不是调用的时候决定的,而是在定义的时候处在的对象就是它的this

箭头函数的this看外层是否有函数,如果有,外层函数的this就是内部箭头函数的this,如果没有,则this是window

代码语言:javascript
复制
let btn1 = document.getElementById('btn1')
let btn2 = document.getElementById('btn2')

btn1.onclick = function () {
    console.log(this)
}
btn2.onclick = () => { // 外层没有函数,指向window
    console.log(this) /
}
===============================================================================
let obj = {
    name: '箭头函数',
    getName: function () {
        btn2.onclick = () => { // this指向obj
            console.log(this)
        }
    }
}
===============================================================================
let obj = {
    name: '箭头函数',
    getName: () => { // 外层没有函数,this指向window
        btn2.onclick = () => { // 外层函数指向window,this指向window
            console.log(this)
        }
    }
}

箭头函数没有arguments,caller,callee

箭头函数本身没有arguments,如果箭头函数在一个function内部,它会将外部函数的arguments拿过来使用。 箭头函数中要想接收不定参数,应该使用rest参数...解决。

代码语言:javascript
复制
let B = (b)=>{  console.log(arguments);
}
B(2,92,32,32);   // Uncaught ReferenceError: arguments is not defined

let C = (...c) => {
  console.log(c);
}
C(3,82,32,11323);  // [3, 82, 32, 11323]

箭头函数通过call和apply调用,不会改变this指向,只会传入参数

代码语言:javascript
复制
let obj2 = {
    a: 10,
    b: function(n) {
        let f = (n) => n + this.a;
        return f(n);
    },
    c: function(n) {
        let f = (n) => n + this.a;
        let m = {
            a: 20
        };
        return f.call(m,n);
    }
};
console.log(obj2.b(1));  // 11
console.log(obj2.c(1)); // 11

箭头函数没有原型属性

代码语言:javascript
复制
var a = ()=>{
  return 1;
}

function b(){
  return 2;
}

console.log(a.prototype);  // undefined
console.log(b.prototype);   // {constructor: ƒ}

箭头函数返回对象时,要加一个小括号

代码语言:javascript
复制
var func = () => ({ foo: 1 }); //正确
var func = () => { foo: 1 };   //错误

多重箭头函数就是一个高阶函数,相当于内嵌函数

代码语言:javascript
复制
const add = x => y => y + x;
//相当于
function add(x){
  return function(y){
    return y + x;
  };
}

箭头函数常见错误

代码语言:javascript
复制
let a = {
  foo: 1,
  bar: () => console.log(this.foo)
}

a.bar()  //undefined bar函数中的this指向父作用域,而a对象没有作用域,因此this不是a,打印结果为undefined

=======================================

function A() {
  this.foo = 1
}

A.prototype.bar = () => console.log(this.foo)

let a = new A()
a.bar()  //undefined 原型上使用箭头函数,this指向是其父作用域,并不是对象a,因此得不到预期结果

uni-app商业级应用实战【NEXT学院】链接:https://pan.baidu.com/s/1sEDaBbeJa03ybLOtdd_ZBw&shfl=sharepset

提取码:5p42

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-05-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 WflynnWeb 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 箭头函数的this:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档