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

JavaScript函数内const变量每次调用可取值不同?该用法是否合规?

关于JavaScript中const用法的疑问解答

你的代码与功能表现

function showInstructions() {
    const againText = (clickCounter > 0) ? "again " : "";
    my2DContext.fillText("Click " + againText + "to try to do the thing", myCanvas.clientWidth / 2, myCanvas.clientHeight / 2);
}

首次调用(clickCounter = 0)时显示:

"Click to try to do the thing"

后续调用(clickCounter > 0)时显示:

"Click again to try to do the thing"

问题解答

1. 这是const的恰当用法吗?属于预期行为吗?

完全是恰当用法,且符合JavaScript中const的预期行为。

JavaScript里的const核心规则是:在同一个作用域内,不能对变量绑定进行重新赋值,但它并不限制“每次进入作用域时重新初始化变量”。你的代码里,againText是在函数内部声明的,每次调用showInstructions都会进入这个函数作用域,重新执行const声明语句——根据当前clickCounter的值完成初始化,整个过程没有对againText进行重新赋值操作,完全符合const的使用规则,功能表现也完全是预期之内的。

2. 和其他语言的表现是否一致?

和部分语言的const/常量机制有差异:

  • 和C++、Java这类静态语言的const不同:这类语言的const通常是编译期常量或在作用域内唯一不可变的实例,一旦初始化就固定,不会在每次函数调用时重新生成。
  • 和Scala的val、Swift的let这类声明更接近:它们同样是作用域内不可重新赋值,但每次进入作用域(比如函数调用)时会重新创建绑定并初始化,和你代码里const的表现一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 05:25:19