JavaScript,当变量作为参数传递时,更改函数内部的变量值

JavaScript,当变量作为参数传递时,更改函数内部的变量值,javascript,scope,Javascript,Scope,为什么这不起作用?有没有办法让它起作用 我很确定它不起作用,因为javascript中存在变量作用域,但我想不出任何方法让它起作用 代码 X不会因为几个原因而改变。首先,您正在修改函数内部的参数y。如果您传递了一个对象,这将像那些通过引用传递的对象一样工作。如果您直接更改x而不是将其作为参数传递,那么它也可以工作 第二个原因是您从未运行过该函数。您需要使用z()调用函数z时发生的情况是初始化参数并为其分配传入的值 因此,函数的内容可能如下 var y = 5; y = 10; 所以,在函数范围

为什么这不起作用?有没有办法让它起作用

我很确定它不起作用,因为javascript中存在变量作用域,但我想不出任何方法让它起作用

代码
X不会因为几个原因而改变。首先,您正在修改函数内部的参数y。如果您传递了一个对象,这将像那些通过引用传递的对象一样工作。如果您直接更改x而不是将其作为参数传递,那么它也可以工作


第二个原因是您从未运行过该函数。您需要使用
z()

调用函数z时发生的情况是初始化参数并为其分配传入的值

因此,函数的内容可能如下

var y = 5;
y = 10;
所以,在函数范围之外的y,保持不变,因为这个y实际上是一个新的y变量,只针对这个函数的范围

var x = 5
var z = function(y) { y = 10; }
console.log(x) // Outputs 5 instead of 10
你到底在哪里换的X?你没有X,也没有调用函数

我假设您希望这样做:

var x = {x: 5}
var z = function(y) { y.x = 10; }
z(x);
console.log(x.x) // Outputs 10
代码使用x作为对象上的变量,而不是通过值而不是引用传递的原语数,因此无法修改

使用对象可以修改对象的属性

var x = 5;
var z = function(y)
 {
 y = 10; 
 //assigned value 10 to the function parameter variable y.
//You haven't done x=y or x=10 and so how do you expect the value of x to change?
}
 console.log(x) // Outputs 5 instead of 10
将其更改为:

var x = 5 ;
var z = function(y)
 {
 x = 10; //changed value of x to 10
}
 console.log(x) // Outputs 10
问题根本与可变范围无关。变量x是全局变量,因为它不在函数范围内。 是的,你可以在函数中改变它的值,但是你的代码的问题是你从来没有改变过x的值

如果这是您打算做的:

z(x); //x=5 is passed to the function z
 function(y)
 {   
  y=10; //initially the value of y is 5.Since you have passed x.
  //Doing y=10 does not change the value of x because y is another variable.The value of x was copied to y and y is not x.

  x=y;//You have assigned 10 to x
  }
 console.log(x); //outputs 10
更改函数参数的值不会更改将其值传递给函数的变量的值。实际上,您正在将x的值传递给y,也就是说,您正在将5传递给y,而不是变量本身


您没有传递变量引用。您只是传递值。

我很确定这个问题已经被问过很多次了,但简单的答案是您不能更改传递到函数中的基元类型的值。唯一调用的函数是
console.log
,那么
x
的值为什么会发生任何变化呢?
z(x); //x=5 is passed to the function z
 function(y)
 {   
  y=10; //initially the value of y is 5.Since you have passed x.
  //Doing y=10 does not change the value of x because y is another variable.The value of x was copied to y and y is not x.

  x=y;//You have assigned 10 to x
  }
 console.log(x); //outputs 10