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里面的,如果同时规定这样的函数是在严格模式下也是没有什么问题的。
添加回答
举报
0/150
提交
取消