如JS代码片段所示下面的值arguments[0]
,并a
始终保持相同的值。这在JS中是众所周知的,但是我仍然很好奇它是如何实现的。
例如,如果a
和arguments[0]
都引用同一个JS对象,则可以理解,它们总是获得更新后的值。但这不能解释原始值(如1)的情况。
如果我理解正确,JS总是会复制原语的值,这意味着两者都存在,a
并object[0]
持有该值的副本。如果是这种情况,如何同步a
并arguments[0]
始终保持同步?
提前致谢:)
function func(a, b) {
console.log("a = " + a);
console.log("arguments[0] = " + arguments[0]);
arguments[0] = 123;
console.log("a = " + a);
console.log("arguments[0] = " + arguments[0]);
a = 123456;
console.log("a = " + a);
console.log("arguments[0] = " + arguments[0]);
}
func(1, 2);
这是输出:
>node test.js
a = 1
arguments[0] = 1
a = 123
arguments[0] = 123
a = 123456
arguments[0] = 123456
该arguments
对象很特殊,它与Javascript实现存储函数参数的方式挂钩。因此,当您分配给时arguments[n]
,它实际上会找到用于保存参数变量的内存块,并将您分配的值放在此处。当通过名称引用参数变量时,也使用相同的内存位置。
考虑它的另一种方法是,每个函数都有一个arguments
类似于本地数组的对象。当JS实现编译函数定义时,它将所有参数变量替换为对该数组的引用。因此,使用的表达式会像使用过一样a
被编译arguments[0]
,b
被转换为arguments[1]
,依此类推。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句