js红宝书笔记-函数

函数声明、函数表达式、箭头函数

  • 函数实际上是对象,每个函数都是Function类型的实例,所以函数名就是
    指向函数对象的指针,而且不一定与函数本身紧密绑定。
    函数声明方式定义函数 表达式定义箭头函数定义Function构造函数

箭头函数

  • 使用胖箭头(=>)语法定义函数表达式
  • 箭头函数不能使用arguments,super,new.target,也不能用作构造函数。箭头函数也没有prototype属性。

函数名

  • 函数名就是指向函数的指针,一个函数可以有多个名称
  • 使用不带括号的函数名会访问函数指针,而不会执行函数
  • ECMAScript6的所有函数对象都会暴露一个只读的name属性,其中包括关于函数的信息。如果它是使用Function构造函数构建的,则会标识成“anonymous”:
    各个函数名
    如果函数是一个获取函数、设置函数,或者使用bind()实例化,那么标识符前面会加上一个前缀:
    不同前缀图片

理解参数

  • EMCAScript函数的参数跟大多数其他语言不同。它既不关心传入的参数个数,也不关心这些参数的数据类型。定义函数时要接收两个参数,并不意味着调用时就传两个参数。
  • 参数在函数内部表现为一个数组,函数被调用时总会接收一个数组,但函数并不关心这个数组中包含什么,事实上,在使用function关键字定义(非箭头)函数时,可以在函数内部访问arguments对象,从中取得传进来的每个参数值。
  • arguments对象是一个类数组对象,可以使用中括号语法访问。
  • 不声明传参,想传几个传几个,根本不存在验证命名参数的机制。arguments对象可以跟着命名参数一起使用
    arguments和命名参数一起使用
  • arguments对象的值始终会跟对应的命名参数同步,修改arguments的值也会修改num的值,它们在内存中还是分开的,只不过会保持同步而已。arguments对象的长度是根据传入的参数个数,而非定义函数时给出的命名参数个数确定的,严格模式下会有变化,无法同步和重写。

箭头函数中的参数

  • 函数使用箭头语法定义的,那么传给函数的参数将不能使用arguments关键字访问,而只能通过定义的命名参数访问。

没有重载

  • 函数没有签名,就没有重载。
  • 定义两个同名函数,后定义的会覆盖先定义的

默认参数值

  • ECMAScript5方法:
    E5
  • ECMAScript6方法(显式定义默认参数):
    显式定义默认参数
  • arguments对象的值不反映参数的默认值,它始终以调用函数时传入的值为准。
  • 默认参数值并不限于原始值或对象类型,也可以使用调用函数返回的值默认参数值为函数返回的值
    函数的默认参数只有在函数被调用时才会求值,不会在函数定义时求值。而且,计算默认值的函数只有在调用函数但未传相应参数时才会被调用。
  • 箭头函数也可以这样使用默认参数,只不过在只有一个参数时,就必须使用括号而不能省略了
    箭头函数的默认参数值

默认参数作用域与暂时性死区

  • 多个参数定义默认值是按照顺序初始化的,所以后定义默认值的参数可以引用先定义的参数
    参数顺序
    暂时性死区

参数的扩展与收集

  • 对可迭代对象应用扩展操作符,并将其作为一个参数传入,可以将可迭代的对象拆分,并将迭代返回的每一个值单独传入。
  • 收集参数的前面如果还有命名参数,则只会收集其余的参数;如果没有则会得到空数组。因为收集参数的结果可变,所以只能把它作为最后一个参数。

函数声明与函数表达式

  • 会在代码执行之前,读取函数声明,并在执行上下文中生成函数定义。而函数表达式必须等到代码执行到它那一行,才会在执行上下文中生产函数定义。
  • 函数声明提升

函数作为值

  • 函数可以用在任何可以使用变量的地方
  • 如果是访问函数而不是调用函数,那就必须不带括号

函数内部

  • arguments对象其实还有一个callee属性,是一个指向arguments对象所在函数的指针。可以有效避免耦合。
  • 在标准函数中,this引用的是把函数当成方法调用的上下文对象,这时候通常称其为this值
  • 在箭头函数中,this指向的是定义箭头函数的上下文。
  • caller引用的是调用当前函数的函数,如果是在全局作用域中调用的则为null
  • new.target:检测函数是否使用new关键字调用的new.target属性。如果函数是正常调用的,则new.target的值为undefined。如果是使用 new 关键字调用的,则将引用被调用的构造函数。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值