You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript嵌套变量值能否修改?模板字符串HTML变量更新故障

问题解答

1. 在JavaScript中,我们能否修改存储在另一个变量中的变量的值?

这得分情况讨论,核心取决于变量存储的是基本类型还是引用类型:

  • 基本类型(字符串、数字、布尔值、null、undefined、Symbol):这类值是直接存在栈内存里的,当你把一个基本类型变量赋值给另一个变量时,本质是复制了一份值的副本。所以修改原变量不会影响另一个变量,反过来也一样。举个例子:
    let a = 10;
    let b = a;
    a = 20;
    console.log(b); // 输出10,不会跟着改变
    
  • 引用类型(对象、数组、函数等):这类值存在堆内存中,变量存储的只是指向堆内存的地址。当你把引用类型变量赋值给另一个变量时,复制的是这个地址,两个变量指向同一个对象。所以修改原对象的属性时,另一个变量访问的对象也会同步变化:
    let obj1 = { name: "Alice" };
    let obj2 = obj1;
    obj1.name = "Bob";
    console.log(obj2.name); // 输出Bob,因为指向同一个对象
    

2. 为什么更新${id}后content没有变化?

你的问题出在模板字符串的插值是一次性计算的。当你执行var content = <div...${id}>这行代码时,JavaScript会立刻把当时id的当前值(空字符串)插入到模板中,生成固定的字符串并赋值给content。之后不管你怎么修改id或者row_id,content`已经是一个静态字符串了,不会自动更新。

要解决这个问题,有两种常用方案:

方法一:把content改成函数,需要时重新生成字符串

这样每次调用函数,都会用最新的id值重新插值生成HTML:

var id = ''; 
function getContent() {
  return `<div class="row well margin_btm_ten"> <div class="col-md-1"> <b>ID is ${id}</b> </div>`;
}
id = 2; 
setTimeout(function(){ 
  console.log(getContent()); // 输出包含"ID is 2"的HTML字符串
});

方法二:每次更新id后重新赋值content

如果不需要频繁生成,也可以直接在修改id后重新计算content:

var id = ''; 
var content = `<div class="row well margin_btm_ten"> <div class="col-md-1"> <b>ID is ${id}</b> </div>`;
id = 2; 
// 更新id后重新生成content
content = `<div class="row well margin_btm_ten"> <div class="col-md-1"> <b>ID is ${id}</b> </div>`;
setTimeout(function(){ 
  console.log(content); // 输出包含"ID is 2"的HTML字符串
});

另外注意你的代码里用了row_id = 2但没把它赋值给id,这也是一个小疏漏,得确保你更新的是模板里实际用到的id变量哦。

内容的提问来源于stack exchange,提问作者user9463040

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:39:10