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

为何模板字面量看似未被解析却仍能正常运行?

为什么模板字面量${Message}看似未被解析但功能正常?

你看到的“未解析”只是视觉错觉,实际模板字面量早就正常工作了,核心原因有两点:

  1. 模板字面量在函数定义时就完成了解析
    当执行document.getElementById("B").onclick = function(){ShowAlert(event, ${Message});};这行代码时,${Message}会立即把当时的Message变量值(也就是传入的"Hello World!")替换进去。这个匿名函数在定义时就通过闭包捕获了解析后的结果,等到你点击按钮执行函数时,传给ShowAlert的已经是解析好的字符串,而非模板字面量语法。

  2. alert显示的是函数源码文本,不是运行时逻辑
    在ShowAlert里弹出e.target.onclick,本质是把函数对象转成了字符串,浏览器会输出函数的原始源码文本,所以你会看到${Message}的写法,但这只是源码的展示,完全不影响函数实际运行时的行为——执行时用的是早就解析好的闭包值。

可以做个简单验证:修改Click函数里的Message值,比如:

function Click(Message)
{
   Message = "Changed!";
   document.getElementById("B").onclick = function(){ShowAlert(event, `${Message}`);};
}

点击按钮会弹出"Changed!",这就证明模板字面量在函数定义时就已经把Message的当前值解析进去了。

附上测试代码:

<!DOCTYPE HTML>
 <html>
<head>
  <title>Untitled</title>
</head>
<body>
<button type="button" id = "B">Click</button>
<script>
Click("Hello World!");
function Click(Message)
{
   document.getElementById("B").onclick = function(){ShowAlert(event, `${Message}`);};
}
function ShowAlert(e, Message)
{
   alert(e.target.onclick + "\n" + Message);
}
</script>
</body>
</html>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 19:18:12