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,当变量作为参数传递时更改函数内部的变量值[重复]的主要内容,如果未能解决你的问题,请参考以下文章

当我们传递一个带有一个参数的函数时,JavaScript 的 reduce 方法表现得很奇怪

作为参数传递时如何评估函数

深入理解javascript原型和闭包(12)——闭包

JavaScript夯实基础系列:闭包

使用变量与指向变量的指针作为函数的参数

Python与Javascript函数的参数传递