前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >面试官:箭头函数和普通函数的区别?箭头函数的this指向哪里?

面试官:箭头函数和普通函数的区别?箭头函数的this指向哪里?

作者头像
前端老道
发布2022-12-01 10:01:45
5100
发布2022-12-01 10:01:45
举报
文章被收录于专栏:Vue开发社区Vue开发社区
一、箭头函数更直观、简洁
  1. 箭头函数为匿名函数
代码语言:javascript
复制
let a = () => {}
  1. 有一个参数可省略(),多个的话不能省略(),用 ,号分开
代码语言:javascript
复制
let a = m => {}
let b = (m, n) => {}

  1. 有返回值的话,可省略 {}
代码语言:javascript
复制
 let a = () => 1 
 // console.log(a()) 值为1 
二、为匿名函数,不能作为构造函数,不能用new操作符
代码语言:javascript
复制
let a = () => 1

let b = new a()

Uncaught TypeError: a is not a constructor
    at <anonymous>:3:9
三、没有自己的this, 其this值为所在上下文的this值
代码语言:javascript
复制
let people = {
  name: 'xiaoming',
  fn: () => {
    console.log(this.name) // 没有返回值
    console.log(this, '箭头函数的 this 的执行环境') // window

  },
  fn2: function () {
    console.log(this.name) // xiaoming
    console.log(this, '普通函数 this 的执行环境') // 当前对象 test
  }
}
people.fn()
people.fn2()

结果:

四、箭头函数没有prototype
代码语言:javascript
复制
let a = () => 1
let b = function () {
  return 1
}

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

五、箭头函数参数不能用arguments,值是有外围非箭头函数所决定的
代码语言:javascript
复制
// 报错
let a = (m) => {
  console.log(arguments)
}
a(1,2,3)  // arguments is not defined

// 值是有外围非箭头函数所决定的
function fn(){
  let f = ()=> {
    console.log(arguments)
  }
  f();
}
fn(1,2,3) // [1,2,3]

// 普通函数的 arguments
let b = function () {
  console.log(...arguments)
}
b(1,2,3)  // 1,2,3
六、箭头函数不能当做Generator函数,不能使用yield关键字
  • 箭头函数的this指向为其上下文的this,一级一级往上找,直到找到 window

当然箭头函数与普通函数的区别还有很多,小编总结的也不是很齐全,有想法的,请各位看官大大多多交流指正~~

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

本文分享自 前端开发社区 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、箭头函数更直观、简洁
  • 二、为匿名函数,不能作为构造函数,不能用new操作符
  • 三、没有自己的this, 其this值为所在上下文的this值
  • 四、箭头函数没有prototype
  • 五、箭头函数参数不能用arguments,值是有外围非箭头函数所决定的
  • 六、箭头函数不能当做Generator函数,不能使用yield关键字
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档