this绑定,箭头函数

70 阅读2分钟

this的绑定规则

  • 默认绑定:独立函数调用,函数没有被绑定到某个对象上进行调用
  • 隐式绑定:通过某个对象发起的函数调用,在调用对象内部有一个函数的引用
  • 显示绑定:明确this指向的对象,通过call, apply, bind去绑定
  • new绑定:
    • 创建一个全新对象
    • 新对象被执行prototype连接
    • 新对象绑定到函数调用的this
    • 如果函数没有返回其他对象,表达式会返回这个对象

说出apply、call、bind函数的用法和区别

用法:

  • apply
    • 第一个参数:绑定this
    • 第二个参数:传入额外的实仓,以数组的形式
  • call
    • 第一个参数:绑定this
    • 参数列表:后续的参数以多参数的形式传递,会作为实参
  • bind(不希望obj对象身上有函数) 区别
  • call、apply和bind都可以改变函数的this指向
  • call、apply和bind第一个参数的是this要指向的对象
  • call、apply和bind都可以后续为函数传参,apply是将参数并成第一个数组,call和bind是将参数依次列出
  • call、apply都是直接调用,bind生成的this指向改变函数需要手动调用

说出箭头函数的各种用法和简写

  • 基本写法
    • ():函数的参数
    • {}:函数的执行体
  •   var foo3 = (name, age) => {
          console.log("箭头函数的函数体")
          console.log("name, age")
      }
    
  • 优化写法
    • 只有一个参数时,可以省略()
    name.forEach(item => {
        console.log(item
    })
    
  • 只有一行代码时,可以省略{}
    names.forEach(item => console.log(item))
    
  • 只有一行代码时,表达式的返回值会作为箭头函数默认返回值,所以可以省略return
    var newNums = nums.filter(item => item % 2 === 0)
    
  • 如果箭头函数默认返回的是对象,在省略{}的时候,对象必须使用()包裹() => ({name: "why"})
var arrFn = () => ["abc", "cba"]
var arrFn = () => {} //注意:这里是{执行体}
var arrFn = () => ({ name: "zhang" })