模板字面量表达式未随变量更新,该如何修复?
问题修复方案与替代方案
模板字面量在定义时会立即计算表达式的值并生成最终字符串,后续money变量的变化不会影响已经生成的description字符串,这就是无论调用多少次payday(),输出始终是初始值的原因。以下是几种可行的修复方案:
方案一:将description改为函数
每次需要获取描述文本时调用函数,让模板字面量重新求值:
var money = 100; function getDescription() { return `You have ${money} money`; } function payday() { money += 50; } function runScenario() { console.log(getDescription()); }
调用runScenario()时,会执行getDescription()函数,动态获取当前money的值生成最新字符串。
方案二:使用Getter访问器
把description定义为对象的getter属性,每次访问时自动重新计算:
var money = 100; var status = { get description() { return `You have ${money} money`; } }; function payday() { money += 50; } function runScenario() { console.log(status.description); }
访问status.description时,会触发getter函数,实时生成包含当前money值的字符串,用法和访问普通变量类似。
方案三:使用Proxy(复杂场景适用)
通过Proxy拦截属性访问,实现动态求值:
var money = 100; var description = new Proxy({}, { get(target, prop) { if (prop === 'text') { return `You have ${money} money`; } return Reflect.get(target, prop); } }); function payday() { money += 50; } function runScenario() { console.log(description.text); }
这种方式适合需要对多个属性做动态处理的场景,每次访问description.text时都会重新计算最新值。
内容的提问来源于stack exchange,提问作者pyradim
相关产品推荐
相关产品推荐

