javascript - 为什么这段js代码中的值没有改变?

标签 javascript

我正在查看这段 JavaScript 代码:

var a = {i: 0};
var b = 0;

function change(a, b) {
  a.i++;
  b++;
}
change(a, b);

console.log(a, b);

您希望被记录: {i:1} 1 。它实际上返回: {i:1} 0? 为什么 b=0 而不是 b=1?

最佳答案

因为 bchange 内的参数 - 在 change 内,b引用局部变量,当局部变量被重新赋值时,对外部的b没有影响。

要么始终将 b 引用为全局变量:

var a = {i: 0};
var b = 0;

function change(a) {
  a.i++;
  b++;
}
change(a);

console.log(a, b);

或者从change返回b,并将外层b赋值给change的结果:

var a = {i: 0};
var b = 0;

function change(a, b) {
  a.i++;
  b++;
  return b;
}
b = change(a, b);

console.log(a, b);

(如果需要返回并重新分配多个变量,请返回对象或数组:

var a = {i: 0};
var b = 0;
var c = 0;

function change(a, b, c) {
  a.i++;
  b++;
  c++;
  return { b, c };
}
({b, c} = change(a, b, c));

console.log(a, b, c);

)

关于javascript - 为什么这段js代码中的值没有改变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51121325/

相关文章:

javascript - 如何在 JavaScript 中找到实例对象的初始创建者?

javascript - 对象定义中的箭头函数

javascript - javascript 中的每个函数调用实际上都是一个新线程吗?

javascript - 如何使用jquery在html中选择带有嵌套表的特定元素

javascript - 如何从异步调用返回响应?

javascript - 在 aspx 页面上仅运行一次 javascript 计时器

javascript - 即使使用 Polyfill,在 IE 8 中也无法使用 Array.Filter

javascript - 动态减小文本框中的字体大小

javascript - 如何使用javascript通知用户访问网站有PWA​​应用程序

javascript - 只允许字符串中的特定字符。 Javascript