函数的扩展

es6规定只要函数使用了默认值,扩展运算符,解构赋值,那么函数内部就不能显式设定为严格模式,否则就会报错

有两种方法可以避免这种限制,第一种是设定全局性的严格模式,第二种把函数包在一个无参数立即执行函数里面

name属性

如果 将一个匿名函数赋值给一个变量,es5的name属性会返回空字符串,es6的name属性会返回实际的函数名

Function 构造函数返回的函数实例,name属性的值为 'anonymous'

bind返回的函数name属性值会加上 bound 前缀

箭头函数

* 如果箭头函数不需要参数,或需要多个参数就使用圆括号代表参数部分

* 如果箭头函数的代码块部分多于一条语句,就要使用大括号将其括起来,并使用return语句返回

* 由于大括号被解释为代码块,所以如果箭头函数直接返回一个对象,必须在对象外面加上括号 ( )

* this指向的固定化,并不是因为箭头函数内部有绑定this机制,实际原因是箭头函数根本没有自己的this,

   导致内部的this就是外层代码块的this。正式因为没有this所以不能用作构造函数

 

尾调用优化

尾调用:指某个函数的最后一步是调用另一个函数

尾调用优化,即只保留内层函数的调用帧,如果所有函数都是尾调用,那么完全可以做到每次执行时调用帧只有一项,

这将大大节省内存这就是尾调用优化的意义

只有不在用到外层函数的内部变量,内层函数的调用帧才会取代外层函数的调用帧否则就无法进行"尾调用优化"

尾递归

 

posted @ 2019-12-03 23:07  jeff_zhu  阅读(166)  评论(0编辑  收藏  举报