参数对象如何在内部工作?

hackjutsu

如JS代码片段所示下面的值arguments[0],并a始终保持相同的值。这在JS中是众所周知的,但是我仍然很好奇它是如何实现的。

例如,如果aarguments[0]都引用同一个JS对象,则可以理解,它们总是获得更新后的值。但这不能解释原始值(如1)的情况。

如果我理解正确,JS总是会复制原语的值,这意味着两者都存在,aobject[0]持有该值的副本。如果是这种情况,如何同步aarguments[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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

参数对象如何在内部工作?

来自分类Dev

接口如何在内部工作?

来自分类Dev

“ range()”如何在内部工作?

来自分类Dev

数组在c / c ++中如何在内部工作

来自分类Dev

Spring方面如何在内部工作?

来自分类Dev

HiveContext spark如何在内部工作?

来自分类Dev

PDOStatement :: fetch()如何在内部工作?

来自分类Dev

FormatterServices.GetUninitializedObject如何在内部工作?

来自分类Dev

PHP的“未设置”构造如何在内部工作?

来自分类Dev

微软假货的垫片如何在内部正常工作?

来自分类Dev

reduceByKey:它如何在内部工作?

来自分类Dev

Twitter Bootstrap如何在内部工作

来自分类Dev

Meteor.loginWithExternalSystem如何在内部工作?

来自分类Dev

如何在内部SeekBar上禁用ScrollView的工作?

来自分类Dev

NetworkX adjacency_matrix()如何在内部工作?

来自分类Dev

数组在c / c ++中如何在内部工作

来自分类Dev

在NestJS中InjectRepository如何在内部工作?

来自分类Dev

exec bash内置函数如何在内部工作?

来自分类Dev

关系字段如何在内部工作?

来自分类Dev

Apache Crunch PTable collectValues如何在内部工作

来自分类Dev

-ss 命令如何在内部工作

来自分类Dev

Intents 和 startActvity 如何在内部工作?

来自分类Dev

TTimer 如何在内部实际工作?

来自分类Dev

如何在内部类中找到正确的“ this”对象?

来自分类Dev

如何在内部类中找到正确的“ this”对象?

来自分类Dev

如何在内部存储中保存POJO对象

来自分类Dev

git status在内部如何工作?

来自分类Dev

printf在内部如何工作?

来自分类Dev

Linux的mv在内部如何工作?