为什么这不起作用,有没有办法让它发挥作用?
我很确定它不起作用因为javascript中的变量作用域,但我想不出任何方法让它工作。
var x = 5;
var z = function(y) { y = 10; };
z(x);
console.log(x) // Outputs 5 instead of 10
答案 0 :(得分:1)
第二个原因是你从未运行过该功能。您需要使用z()
答案 1 :(得分:1)
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作为对象的变量而不是原始数字,它通过值传递而不是通过引用传递,因此无法修改。
使用对象可以修改对象的属性(属性)
答案 2 :(得分:0)
调用函数z时会发生的情况是参数初始化并分配您传入的值。
因此该函数可能会读取类似
的内容var y = 5;
y = 10;
因此,函数外部范围内的y保持不变,因为这个y实际上是一个全新的y变量,仅适用于此函数的范围。
答案 3 :(得分:0)
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而不是变量本身。
您没有传递变量引用。您只是传递值。