JavaScript,当变量作为参数传递时更改函数内部的变量值[重复]
Posted
技术标签:
【中文标题】JavaScript,当变量作为参数传递时更改函数内部的变量值[重复]【英文标题】:JavaScript, changing a variables value inside of a function when the variable is passed as a parameter [duplicate] 【发布时间】:2016-03-28 03:37:27 【问题描述】:为什么这不起作用,有什么办法让它起作用吗?
我很确定它不起作用,因为 javascript 中的变量范围,但我想不出任何方法让它起作用。
代码
var x = 5;
var z = function(y) y = 10; ;
z(x);
console.log(x) // Outputs 5 instead of 10
【问题讨论】:
我很确定这个问题已经被问过很多次了,但简单的答案是你不能改变传递给函数的原始类型的值。 唯一调用的函数是console.log
,那么为什么x
的值会发生任何变化呢?
【参考方案1】:
X 不会改变有几个原因。首先是您正在修改函数内部的参数 y 。如果您传递了一个对象,这将起作用,因为它们是通过引用传递的。如果您直接更改 x 而不是将其作为参数传递,它也会起作用。
第二个原因是您从未运行过该函数。你需要用z()
调用z
【讨论】:
【参考方案2】:当你调用函数 z 时会发生什么,参数被初始化并分配你传入的值。
所以这个函数可能读起来像
var y = 5;
y = 10;
因此,在函数范围之外的 y 保持不变,因为这个 y 实际上是一个全新的 y 变量,仅用于这个函数的范围。
【讨论】:
【参考方案3】: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 作为对象的变量,而不是通过值而不是引用传递的原始数字,因此无法修改。
使用对象可以修改对象的属性(properties)
【讨论】:
【参考方案4】: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 而不是变量本身。
你没有传递变量引用。你只是传递了值。
【讨论】:
以上是关于JavaScript,当变量作为参数传递时更改函数内部的变量值[重复]的主要内容,如果未能解决你的问题,请参考以下文章