美文网首页
ES6-箭头函数

ES6-箭头函数

作者: 清风昙 | 来源:发表于2022-03-06 14:12 被阅读0次

ES6允许使用箭头(=>)定义函数,箭头函数的语法多变,根据实际的使用场景有多种形式,但需要由函数参数、箭头和函数体组成。

  • 箭头函数的语法
    单一参数、函数体只有一条语句的箭头函数:
let title = msg => msg
// 相当于
function title(msg) {
  return msg
}

函数有多个的参数,需要在参数的两侧添加一对圆括号:

let title = (msg, name) => `${name},${title}`
// 相当于
function title(msg, name) {
  return `${name},${title}`
}

如果函数没有参数,需要使用一对空的圆括号:

let title = () => "welcome you"

函数体有多条语句,用花括号包裹函数体:

let title = (msg, title) => {
  let cont = msg + title
  return cont
}

箭头函数的返回值是一个对象字面量,需要将该对象字面量包裹在圆括号中:

let title = (msg, name) => ({msg: msg, name: name})
// 相当于
function title(msg, name) {
  return {
    msg: msg,
    name: name
  }
}
  • 箭头函数和this
    JavaScript中的this关键字并不是指向对象本身,其指向是可以改变的,根据当前执行上下文的变化而变化。
var title = 'welcome'
function sayHello(name) {
  console.log(`${this.title},name`)
}
var obj = {
  title: 'Hello',
  sayHello: sayHello
}
sayHello('zhangsan')  // welcome,zhangsan
obj.sayHello('liwu')  // Hello,liwu
var sayHi = obj.sayHello()
sayHi('wangliu')  // welcome wangliu

分析上面地js代码:
调用sayHello('zhangsan')时,相当于执行window.sayHello('zhangsan'),因此函数内部的this指向的时window对象,最后输出“welcome,zhangsan”
调用obj.sayHello('liwu')时,函数内部的this指向的是obj对象,而obj对象内部定义了title属性,最后输出“Hello,liwu”
调用sayHi('wangliu')时,虽然该函数是由obj.sayHello赋值得到,但在执行sayHi()函数时,当前的执行上下文对象时window对象,相当于调用window.sayHi('wangliu'),因此最后输出“welcome wanliu”

为了解决this指向问题,可以使用函数对象的bind()方法,将this明确地绑定到某个对象。

var obj = {
  title: 'Hello',
  sayHello: sayHello
}
obj.sayHello('liwu').bind(obj)  // Hello,liwu

使用bind()方法实际上是创建了一个新地函数,称为绑定函数,该函数的this被绑定到参数传入的对象。
也可以使用箭头函数来解决this问题。箭头函数中没有this绑定,必须通过查找作用域决定其值。如果箭头函数被非箭头函数包含,则this绑定的是最近一层非箭头函数的this,否则this的值会被设置为全局对象。

var obj = {
  title: 'Hello',
  sayHello:  function() {
    setTimeout(() => console.log(`this.title`), 2000)
  }
}
obj.sayHello() // Hello

使用箭头函数需注意几点:
(1)没有this、super、arguments、new.target绑定,箭头函数中的this、super、arguments、new.target这些值由外围最近一层非箭头函数决定。
(2)不能通过new关键字调用。箭头函数不能被用作构造函数,也就是不可以使用new关键字调用箭头函数,否则程序会抛出错误
(3)没有原型。因为不可通过new关键字调用箭头函数,所以没有构建原型的需求,就不存在prototype这属性
(4)不支持arguments对象。箭头函数没有arguments绑定,只能通过命名参数和rest参数这两形式访问函数的参数

相关文章

  • ES6-箭头函数

    箭头函数中的this ES6函数参数默认值 箭头函数不适用的场景

  • es6-箭头函数

    1 变量定义 let只在局部代码块中有效 const不希望修改,差不多跟常量一个意思吧 2 箭头函数 【主...

  • ES6-箭头函数

    基本语法 当有多个参数时 (参数1,参数2,...参数n)=>{函数体} 当只有一个return时,{}可以省略 ...

  • ES6-箭头函数

    ES6允许使用箭头(=>)定义函数,箭头函数的语法多变,根据实际的使用场景有多种形式,但需要由函数参数、箭头和函数...

  • ES6-函数箭头

    var coverSupport = 'CSS' in window && typ...

  • ES6-箭头函数

    声明和特点 声明 特点 1.this是静态的,this始终指向声明时所在作用域下的值 2.不能作为构造函数实例化对...

  • ES6-函数与箭头函数

    一、设置默认值 二、箭头函数 单个参数 多个参数 实际应用 箭头函数体内的this指向定义时所在的对象,而非实例化...

  • ES6~箭头函数

    什么是箭头函数 单表达式箭头函数 相当于 多表达式箭头函数 箭头函数相当于匿名函数,并且简化了函数定义。箭头函数有...

  • 箭头函数和立即执行函数

    箭头函数 箭头函数和普通函数有什么区别?如果把箭头函数转换为不用箭头函数的形式,如何转换主要是this的差别,箭头...

  • 学习 ES 6 箭头函数

    箭头函数的用法 ES6 允许使用“箭头”(=>)定义函数。 箭头函数的一个用处是简化回调函数。 箭头函数 this...

网友评论

      本文标题:ES6-箭头函数

      本文链接:https://www.haomeiwen.com/subject/pgzirrtx.html