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 是否在参数处赋值,最后结果却不同,不太明白,求解惑
这个应该是与严格模式有关
use strict
在非严格模式下,改变
argument
的值,会同时改变对应参数的值!在严格模式下不会这样。
所以第一个输出
21
是对的,如果函数开始 加一句“use strict”
就输出12
了。还没看
ES2015
标准,只是看过点儿教程。下面说的不一定对。ES2015 标准规定,如果使用了默认参数,如
c=3
,在函数里就不能显示的写use strict
。可能这个时候浏览器会自动进入严格模式吧。因为这样也不会不兼容以前的代码,毕竟默认参数是ES2015里面的,如果同时规定这样的函数是在严格模式下也是没有什么问题的。