function

2021/11/10

# bind

bind/call/apply区别:

  • bind将指定函数绑定执行的this,返回新的函数
  • call和apply将调用函数绑定到指定this直接执行
  • call和apply区别:传参不同,call将参数分开:fn.call(obj, ...args)

bind

  • 作用:将一个函数绑定this,返回新的函数
  • 调用:fn2 = fn1.bind(obj[, ...args])
  • 入参:Object[, any]
  • 返回:Function
  • tip:需要分辨是否是new式调用,因为new式调用是走的另一套流程

# call

call

  • 作用:将函数绑定this执行
  • 调用:fn.call(obj[, ...args])
  • 入参:Object[, any]
  • 返回:any
const obj = {
    name: '张三',
    age: 18
}
function fn() {
    console.log(this);
    console.log(this.age);
}

var age = 10

fn(); // node环境: undefined  浏览器环境:10
fn.call(obj); // 18
1
2
3
4
5
6
7
8
9
10
11
12
13

# apply

apply

  • 作用:绑定函数执行的this执行
  • 调用:fn.apply(thisArg[, [ ...args ]])
  • 入参:Object[, Array | (类数组)]
  • 返回:any

类Array:有下标做key,有length属性,如nodelist、arguments

const obj = {
    name: 'hdy',
    age: 18
}
const fn = function(book) {
    console.log(`我的名字是${this.name},我今年${this.age}岁啦!我喜欢读${book}`);
}

fn.apply(obj, ['蝴蝶书']); // 我的名字是hdy,我今年18岁啦!我喜欢读蝴蝶书。
1
2
3
4
5
6
7
8
9

# length

length

  • 作用:拿到function的形参数量
  • 调用:fn.length
  • 返回:Number
  • tip:对形参解构无效

# name

name

  • 作用:查看函数名称
  • 调用:fn.name
  • 返回:String

# toString

toString

  • 作用:返回函数的定义代码
  • 调用:fn.toString()
  • 返回:String
function a() {}
const b = () => {}

console.log(a); // function a() {}
console.log(b); // () => {}
1
2
3
4
5

# arguments

arguments

  • 作用:拿到函数实参
  • 使用:函数内固有属性
  • tip:箭头函数没有arguments
  • tip:一般不建议直接用隐式对象,可以用...args显示调用
  • tip:arguments是类数组,不是纯正的数组

# 箭头函数

箭头函数

  • 作用:es6新增定义函数方式
  • 使用:(...arg) => {}
  • 特性:this/arguments/super/无法当构造函数
  • 技巧:绑定this/匿名函数

# new.target

new.target

  • 作用:指向构造函数的应用
  • 值:本Function的引用
  • tip:只有new操作符才会被赋值,否则是undefined
上次更新: 11/1/2024