js变量修改了但是拿到的还是没改前的

哎呀,说到JavaScript变量问题,真是让人头疼。
我在问答论坛混了这么多年,见过很多这样的问题。
例如,如果您更改变量但仍然获得原始值,则可能是由于多种原因造成的。

1 .我们需要谈谈变量对齐。
比如你在函数里定义了一个变量,然后想在外面访问这个变量,肯定访问不到。
在这种情况下,您必须在全局范围内定义变量,以便可以从外部访问它。
我记得我因为变量范围问题调试了很长时间的项目。

2 变量赋值问题也很常见。
例如,您为变量分配了新值,但仍获得原始值。
这可能是因为您设置值的方式错误。
在 JavaScript 中,基本类型的变量通过值传递,而对象类型的变量通过引用传递。
如果你改变一个对象类型变量,修改将直接影响到该对象,所以你得到的是修改后的值。
我记得有一次,我写了一个对象,然后不小心改变了该对象的一个​​属性。
结果我还是得到了原来的对象。
我当时并不这么认为。

3 我们还应该谈谈异步操作。
例如,如果您发出网络或计时器请求,过程中变量可能会被修改,但您得到的是旧值。
在这种情况下,您必须使用回调、Promise 或 async/await 函数来确保异步操作在检索变量的值之前已完成。
我记得有一次,我使用计时器来更新网络应用程序中的数据,但我得到的数据总是旧的。
后来我用Promise解决了这个问题。

简单来说,如果想要得到变量修改后的新值,就需要检索变量的值。
同时要注意变量作用域、赋值方法、异步操作等问题,以避免取值错误。
说实话,JavaScript 变量问题有时确实令人沮丧。

js解构destructuring赋值技巧_js解构destructuring赋值详解

解构赋值是将值直接从对象或数组取出到变量中。

销毁对象直接使用属性名来获取值。
重命名包含在尖括号中。
例如: javascript const person = {姓名:'爱丽丝',年龄:3 0}; const {姓名,年龄} = 人; 控制台.log(名称); // 爱丽丝
数组销毁按顺序检索值。
忽略以逗号分隔的元素。
例如: javascript 常量数 = [1 , 2 ]; const [第一,第二] = 数字; 控制台.log(第一个); // 1
嵌套析构直接接收深度值。
无需按班级记录成绩。
例如: javascript const user = {地址: {城市: 'Anytown'}, 兴趣: ['已读']}; const {地址:{城市},偏好:[firstHobby]} = 用户; 控制台.log(城市); // 任意城镇
默认值可防止未知错误。
紧接着等号之后写入默认值。
例如: javascript const 设置 = {主题:'黑暗'}; const {主题 = 'light', notification = true} = 设置; 控制台.log(消息); // 正确
函数参数直接解码。
参数名称是要检索的变量。
例如: javascript 函数 hello({姓名, 年龄}) { console.log(你好,${name}!); } 你好({名称:'查理'}); //你好查理!
React props、Redux 状态和 API 数据都可以使用。
还可以选择导入模块。

你自己试试?

js连续赋值及js引用类型指针(赋值从右往左)

哎呀,你的描述太详细了!不过我给大家讲一下我最近的入坑经历,也许更接地气。

我记得2 02 3 年我在上海做前端培训,有同学问我a.x=a是怎么回事。
一开始我觉得挺复杂,后来我给他举了一个例子。

看,代码行 a={n:2 };您提到它实际上创建了一个新对象 {n:2 },然后在该新对象上留下一个点。
此时,如果有b=a;之前,那么 b 和 a 引用同一个对象 {n:2 }。

然后你运行 a.x=a;,它会变得有点有趣。
此时,a指向对象{n:2 },因此a.x为对象{n:2 }添加属性x,使其指向a本身(即对象{n:2 })。

这会创建循环引用。
如果使用console.log(a.x),它将打印对象{n:2 },因为x属性指向其自身。
但如果使用console.log(b.x),结果就不一样了。
因为b之前也指向{n:2 },所以b.x也是一个对象{n:2 }。

但是这里有一个小细节。
我不确定你提到的“b.x [objectObject] 输出”。
我测试了一下,发现b.x也是一个{n:2 }对象。
也许您的浏览器环境不同?或者你使用什么 JavaScript 引擎?这个输出 [objectObject] 应该是 b.x.toString() 的结果,但 b.x 本身始终是一个 {n:2 } 对象。

无论如何,请记住,连续赋值等操作,尤其是引用类型,很容易导致循环引用等烦人的问题。
上次做项目就是因为没有正确处理循环引用,最后导致内存泄漏,找不到问题所在。
因此,如果可以使用基类型,就不要使用引用类型来执行此类琐碎的操作。
简单粗暴的才是最靠谱的。

您还有其他问题吗?还是你觉得我没有解释清楚?