es6 笔记

1.整数和浮点数是同样的储存方法,所以3和3.0被视为同一个值.

Number.isInteger(25) // true
Number.isInteger(25.0) // true

为什么同样储存方式,就会被视为同一个值?
2.函数的默认值.

//其次,有利于将来的代码优化,即使未来的版本在对外接口中,彻底拿掉这个参数,也不会导致以前的代码无法运行。

为什么。
3.函数的length属性

//length属性返回的是“预期输入参数的个数”。但如果有默认参数了,这个参数便不再是预期输入,所以不算。
//如果默认参数不是尾参数,那该参数后面的参数也不再是预期输入参数。
为什么?
(function (a) {}).length // 1
(function (a = 5) {}).length // 0
(function (a, b, c = 5) {}).length // 2
(function (a = 0, b, c) {}).length // 0
(function (a, b = 1, c) {}).length // 1
//length属性忽略rest参数
(function(...a) {}).length  // 0
(function(a, ...b) {}).length  // 1
//由于rest参数是多个参数的数组,所以很明显它只能是最后一个参数。

4.尾调用以及优化。
调用帧:函数A里调用了函数B,函数A和函数B都是一个调用帧,函数A是外层函数,函数A是内层函数。两者组合在一起为一个调用栈。正常情况下,函数A执行完后,函数A的调用帧才会消失。如果函数A有调用函数C,那就以此类推了。
尾调用:尾调用是指函数的最后一步是调用另一个函数,并返回。如果没有返回,他不是尾调用,因为会在这个调用后默认给一个return undefined
尾调用由于是函数的最后一步操作,所以不需要保留外层函数的调用帧,因为调用位置、内部变量等信息都不会再用到了,只要直接用内层函数的调用帧,取代外层函数的调用帧就可以了。

//尾调用。
function f(x) {
  if (x > 0) {
    return m(x)
  }
  return n(x);
}

为什么有尾调用的情况下,外层函数调用位置、内部变量等信息不会再用到?
答:如果是尾调用中内层函数没有用到改外层函数的情况下,意味着内层函数调用完后,外层函数也会结束。所以位置,变量都不需要得到保存,因为这些位置和变量都不会再用到了。如果不是尾函数,则需要保存,因为运行完这个内层函数后,还要回到外层函数的调用内层函数的位置,继续执行下一部分代码。
编译器会识别这种尾调用情况,进行“尾调用优化”,使得调用帧永远只有一个(也就是当前内层函数的调用帧),释放了内存。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值