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
相关产品推荐
相关产品推荐

