电脑配置|硬件知识|电脑故障|电脑技巧|电脑应用|组装电脑

Javascript函数参数ByVal或ByRef共享

Javascript函数参数ByVal或ByRef,有一个普遍的误解:数字,字符串和其他简单的类型是通过值,数字,字符串,对象,数组和其他复杂类型地址。
这是错误的吗为什么会有这样的错误看看代码的两个部分:
复制代码代码如下所示:
代码值/错觉
功能modifylikebyval(x){
x=1;
console.log(X = %d,x);
}
变量x=0;
console.log(X = %d,x = 0); / /输出x
modifylikebyval(x); / / x = 1的输出
console.log(X = %d,x); / / x = 0 x输出没有变化!

复制代码代码如下所示:
地址码引起错觉
功能modifylikebyref(x){
x { 0 } = 4;
x { 1 } = 5;
x { 2 } = 6;
console.log(X = { %s,x.join(''));
}
var = { 1, 2, 3 };
console.log(X = { %s,x.join()); / / x =输出{ 1, 2 },3
ModifyLikeByRef(x); / / x =输出{ 4, 5 },6
console.log(X = { %s,x.join()); / / x =输出{ 4, 5 },6 x的变化!

因此,它的结论是从上面的代码,一个简单的类型作为参数ByVal,和复杂类型作为一个参数是ByRef。

问题在哪里

仔细观察两个函数,你可以找到一个点:
在ByVal参数x,x = 1是直接修改。
在我,这是修改后的参数x的成员:x { 0 } = 4;X { 1 } = 5;X { 2 } = 6;

我得出一个猜想:在Javascript中,所有变量或成员都是指针。当修改变量或成员值时,它们实际上修改指针的地址。

上面的代码可以解释:

在一个:
复制代码代码如下所示:
全局{全局范围,以下功能范围
变量x=0;初始化指针x,指向数字0。
有趣(x){
x =全局变量;x;传入参数;全局变量;娱乐域X和全局域X地址指针指针地址点0
x=1;修改x指针地址的乐趣域,点号1;
最后,x没有改变指针。
}

在我的:
复制代码代码如下所示:
全局{全局范围,以下功能范围
*
初始化指针x并指向数组{ 1, 2, 3 }
事实上,x的三个成员分别是0, 1和2,分别指向1, 2, 3。
* /
var = { 1, 2, 3 };
有趣(x){
x =全局变量;x;传入参数全局x;有趣域和全局域指针地址X地址指针到一个{ 1, 2, 3 }数组
*
在娱乐领域的X没有被改变了。
接下来,在有趣的域中修改x(或全局x)的三个成员指针的方向。
* /
x { 0 } = 4;
x { 1 } = 5;
x { 2 } = 6;
最后,x指针没有改变,但是三个成员指针被改变了,然后我们看到了输出结果。
}

这段代码是如何解释的
复制代码代码如下所示:
(函数(a,b){)
参数{ 0 } = 1;
b=2;
console.log(论点,A,B);
}(- 1,- 2);

只能说A,B,是参数{ 0 },…{别名。

如果有错误的地方,请指出,谢谢。

如果你有更好的解释,欢迎分享。