Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript按引用传递和局部变量赋值_Javascript_Namespaces_Pass By Reference - Fatal编程技术网

Javascript按引用传递和局部变量赋值

Javascript按引用传递和局部变量赋值,javascript,namespaces,pass-by-reference,Javascript,Namespaces,Pass By Reference,我的问题是关于,但我仍然有问题 如果名称空间中有两个数字 var global_namespace = {a:3, b:5}; 我剩下的代码是 function change() { var a = this.global_namespace.a; var b = this.global_namespace.b; a += 2; b *= 2; } console.log(global_namespace.a + " " + global_namespace

我的问题是关于,但我仍然有问题

如果名称空间中有两个数字

var global_namespace = {a:3, b:5};
我剩下的代码是

function change() {
    var a = this.global_namespace.a;
    var b = this.global_namespace.b;

    a += 2;
    b *= 2;
}

console.log(global_namespace.a + " " + global_namespace.b);
change();
console.log(global_namespace.a + " " + global_namespace.b);

我想声明对名称空间中变量的引用,但当我观察调试器时,本地a和b变量会发生更改,而不会更新名称空间中的变量。我尝试引用全局名称空间变量的全部原因是允许在整个函数中使用较短的变量名,以提高可读性。但是,我不能通过在函数范围内存储名称空间的副本来牺牲可能加倍的内存。

如果您希望通过引用更改变量,您应该这样做

var global_namespace = {a:3, b:5};

function change() {
    global_namespace.a += 2;
    global_namespace.b *= 2;
}

console.log(global_namespace.a + " " + global_namespace.b);
change();
console.log(global_namespace.a + " " + global_namespace.b);

为什么您希望全球VAR得到更新?您使用了var,它在当前词法作用域中创建了一个局部变量。您必须像全局_名称空间一样递增。a+=2var a和b只是一个数字,它不是通过引用传递的。是否有方法将a和b声明为对名称空间变量的引用?我知道递增的global_namespace.a+=2是可行的,但是每次我引用其中一个变量时,我都会尽量避免编写这么长的代码,因为代码的可读性会消失。同时,我不能只是创建一个本地副本,更改它,然后将其重新分配到全局命名空间,因为我担心内存会加倍;然后gn.a+=2;等等。但是,不能将一个变量作为另一个变量或对象属性的别名。所有变量都有一个值。在对象赋值的情况下,例如var a={},该值是一个引用。在原语的情况下,例如var b=3,该值为原语值。所以在var c=a中,a的值是对一个对象的引用,因此一个等价的引用被分配给c。在var d=b的情况下,分配的值等于b的值,即3。