为了账号安全,请及时绑定邮箱和手机立即绑定

es6新特性的一点疑问

es6新特性的一点疑问

慕容3067478 2018-10-18 11:15:13
function sidEffecting(ary) {  ary[0] = ary[2];}function bar(a,b,c) {  // c无赋值  c = 10  sidEffecting(arguments);  return a + b + c;}bar(1,1,1)function sidEffecting(ary) {  ary[0] = ary[2];}function bar(a,b,c=3) {  // c=3  c = 10  sidEffecting(arguments);  return a + b + c;}bar(1,1,1)两段代码,差别只是 c 是否在参数处赋值,最后结果却不同,不太明白,求解惑
查看完整描述

1 回答

?
GCT1015

TA贡献1827条经验 获得超4个赞

这个应该是与严格模式有关use strict

在非严格模式下,改变argument的值,会同时改变对应参数的值!
在严格模式下不会这样。
所以第一个输出21是对的,如果函数开始 加一句“use strict” 就输出 12 了。

还没看 ES2015标准,只是看过点儿教程。下面说的不一定对。
ES2015 标准规定,如果使用了默认参数,如c=3,在函数里就不能显示的写use strict。可能这个时候浏览器会自动进入严格模式吧。因为这样也不会不兼容以前的代码,毕竟默认参数是ES2015里面的,如果同时规定这样的函数是在严格模式下也是没有什么问题的。


查看完整回答
反对 回复 2018-11-20
  • 1 回答
  • 0 关注
  • 651 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信