作者:寻找另一半哥哥_335 | 来源:互联网 | 2024-11-18 11:56
在 Javascript 中,函数参数的传递方式和默认值的设置对函数行为有很大影响。以下是一个示例代码,展示了这些机制的实际应用:
1 2 3 4 5 6 7 8 9 10
| function sideEffecting(ary) { ary[0] = ary[2]; }
function bar(a, b, c) { c = 10; sideEffecting(arguments); return a + b + c; }
var res = bar(1, 1, 1); console.log(res); |
在这个例子中,我们定义了两个函数 sideEffecting
和 bar
。函数 sideEffecting
接受一个数组参数,并将数组的第一个元素设置为第三个元素的值。函数 bar
接受三个参数 a
、b
和 c
,并将 c
的值设置为 10,然后调用 sideEffecting
函数并传入 arguments
对象,最后返回 a + b + c
的结果。
如果我们将 bar
函数的参数 c
设置为默认值 3,如下所示:
1
| function bar(a, b, c = 3) { |
那么,最终得到的 res
值会有所不同。
问题:为什么在设置了 c = 3
后,sideEffecting(arguments)
中的 arguments
对象中的 c
没有被 c = 10
改写?
解释:在 Javascript 中,arguments
对象是一个类数组对象,它包含了函数调用时传递的所有参数。当我们在函数内部显式地给参数赋值时(如 c = 10
),这个赋值操作并不会影响 arguments
对象中的对应值。这是因为 arguments
对象在函数调用时已经确定,而显式的赋值操作只是改变了局部变量的值。
另外,设置参数的默认值可以提供更多的灵活性。如果没有设置默认值,当调用函数时未传递该参数或传递了 undefined
,参数将被视为 undefined
。而设置了默认值后,即使未传递该参数或传递了 undefined
,参数也会被赋予默认值。