标签:空字符串 turn ken es6 使用 数组 返回 扩展 命名参数
function fnName(){
}
var fnName = function(){
}
// 参数:Function 接收任意多的参数,但最后一个参数总被认为是函数体,前面的参数是传入新函数的参数
var fnName = new Function(a, b, c, ‘return a + b + c‘)
var fnName = () => {
}
函数据以执行的执行环境
箭头函数无 this
null
注意:anguments.length 是实际传入函数参数的个数,而 fnName.length 是函数希望接收命名参数的个数,【ES6函数默认值对length的影响】:指定默认值以及在指定默认值的参数之后的所有参数,都不会计算到length中
this
对象的值apply
接收 anguments
对象或数组,call
必须逐个列举出来this
值的函数this
值{Function}
被指定 this
值的新函数function (a = 2, b = 3){
}
【注意:函数的length属性,不会计算指定默认值的参数以及其后的所有参数】
箭头函数有几点需要注意:
this
对象是函数定义是所在的对象,而不是使用时的对象arguments
对象,该对象在函数体内不存在。如果要用,可以用 Rest参数
代替。yield
命令,因此箭头函数不能用作 Generator
函数。this
,所以当然也就不能用 call()
、apply()
、bind()
这些方法去改变 this
的指向。【注意:ES6的尾调用优化只在严格模式下开启,正常模式是无效的。】
ES6明确规定,所有ECMAScript的实现,都必须部署“尾调用优化”。这就是说,在ES6中,只要使用尾递归,就不会发生栈溢出,相对节省内存。
相关概念:
1、尾调用:函数的最后一步调用另一个函数,叫做尾调用
尾调用的好处是:只保留内层函数的调用帧,节省内存
2、尾递归:函数尾调用自身,叫做尾递归
3、柯里化:将多参数函数转成单参数函数
因为尾调用优化的本质是,只保留内层函数的调用帧,ES6的尾调用只在严格模式下生效,那么在非严格模式下是否可以进行尾调用优化呢?但是可以的,有两种方案,一种是使用蹦床函数,一种是真正的尾调用,阮一峰的教程里有讲
from: http://blog.poetries.top/js-knowledge-note/#/note/basis/func
标签:空字符串 turn ken es6 使用 数组 返回 扩展 命名参数
原文地址:https://www.cnblogs.com/GarfieldEr007/p/12251680.html