关于阅读 ES6- 函数 整理的问题

1、ES5怎么设置函数参数的默认值

答:function aa(x){
x = x || ‘hello’
console.log(x)
}

2、ES6怎么设置函数参数的默认值

答:可直接设置在参数后面
function aa(x = ‘hello’){
console.log(x)
}

3、ES6中函数的默认参数有什么特点

答:默认参数是惰性的,每次调用函数,都是重新计算,而不是在每次进行叠加
let x = 11
function a(p = x+1){console.log§}
a() // 12
x = 12
a() // 结果为13 惰性求值,并不会继续使用第一次 p=12的值

4、函数的length怎么进行计算

答:length是第一默认参数出现之前的参数个数,也不包括rest参数
(function a(){}).length // 0
(function a(x, y=1, z){}).length // 1
(function a(…rest){}).length // 0

5、函数的参数设置默认参数和不设置默认参数的区别

答:设置了默认参数的会单独形成一个作用域,等到初始化结束,这个作用域才会消失
没有设置默认参数的不会形成单独作用的

6、怎么获取函数的剩余参数

答:使用函数的 rest参数,即可获得由剩余参数所组成的数组
function a(x, …rest){console.log(rest)}
a(1,2,3,4,5) // [2,3,4,5]

7、函数的rest参数后面如果跟着其他参数,会怎么样

答:会报错

8、严格模式可以在函数体内进行设置吗

答:ES5中可以
ES6中如果函数的参数设置了默认参数、解构赋值、扩展运算符,那么函数体内设置严格模式会报错。
可以通过设置全局严格模式

9、怎么获取函数的函数名

答:通过函数的name属性
(function a(){}).name // 常规函数返回函数名 ‘a’
(function (){}).name // 匿名函数返回空字符串’’
(() => {console.log(1)}).name // 箭头函数返回 空字符串’’
(new Function).name // 匿名函数返回 anonymous
((function a(){}).bind({})).name // bind函数返回 ‘bound a’

10、如果将一个匿名函数赋值给一个变量,那么这个函数的name会是什么

答:ES5中返回空字符串,ES6中会返回变量名

11、如果将一个具名函数赋值给一个变量,那么name是什么

答:返回这个函数的函数原本函数名,而非变量名

12、箭头函数的特性

答:箭头函数没有自己的this
箭头函数不可以作为构造函数
箭头函数不能用 arguments,但可以使用 rest 参数
箭头函数不能用作Generator函数,不能使用 yield 命令
this指向的是函数定义时所在的对象,而不是执行时所在的对象

13、箭头函数的this的指向固定化是为什么?

答:因为箭头函数没有自己的this,this是外层对象。所以箭头函数不能作为构造函数

14、箭头函数可以使用call() bind() apply来改变this的指向吗?

答:不能,因为箭头函数本身没有自己的this

15、ES7中的函数绑定运算符是什么?

答:函数绑定运算符的功能和 call bind apply一样,就是将一个函数绑定到一个对象上,改变函数的this指向
bar::aaa // 表示aaa绑定到bar对象上,this的指向变成 bar,相当于 aaa.bing(bar)
foo::aaa(…arguments) // 表示aaa绑定到foo对象上,this的指向变成foo,相当于aaa.apply(foo, arguments)

16、什么是函数的尾调用

答:函数的最后一步是调用一个函数,形如下面这种形式
function a(x){
return g(x)
}

17、什么叫做‘尾调用优化’

答:当函数的内层函数不用外层函数的变量时,可以直接去掉外层函数而保留内层函数的调用桢时,就叫做‘尾调用优化’
function a(){
return function b(){
console.log(111)
}
}
可以直接尾调用优化成:
function b(){
console.log(111)
}
注意:只有函数是尾调用函数的时候,才能实现 尾调用优化

18、什么叫做‘递归’

答:函数自己调用自己,叫做 递归

19、什么叫做‘尾递归’

答:尾调用函数调用自身,叫做 尾递归。可大大的节省内存

20、尾递归相比于 递归有什么优点?

答:永远不会‘栈溢出’。因为递归有成百上千的调用桢,容易发生栈溢出,
而尾递归的栈只存在一个调用桢,所以不会溢出

21、函数编程概念中的 ‘柯里化’是什么?

答:就是把多个入参函数改一单个入参的函数

22、严格模式下可以进行 尾调用优化吗?

答:不行。因为函数里面存在 arguments(调用时函数的参数)和caller(调用当前函数的那个函数)
尾调用优化的时候会改变调用栈,所以 arguments和caller就会失真报错

23、在严格模式下怎么实现 尾调用优化的效果呢?

答:使用循环代替

24、ES2017的对于函数定义和函数调用的尾逗号的处理是什么?

答:ES2017之前不允许出现尾逗号
ES2017之后允许函数定义和调用时最后一个参数可以有逗号的存在
这样就和对象数组等统一逗号的规范

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值