函数单次调用内未重赋值但每次调用赋值不同的变量,应使用let还是const?
该用
let还是const?一次给你讲清楚 这个困惑太正常了,我当初刚接触ES6的时候也纠结过!核心其实是要搞懂let和const的本质区别——const限制的不是变量的值不能变,而是变量本身的引用不能被重新赋值。
先结合你的场景拆解:
- 每次调用
setSetting函数时,都会进入一个新的函数作用域,settingToFind会被重新初始化(指向一个新的对象),这和const的规则不冲突; - 而在单次函数执行过程中,你明确说不会给
settingToFind做重赋值操作(比如不会写settingToFind = {...}这种代码),那完全可以用const。
为什么用const更合适?
- 明确代码意图:用
const能清晰地告诉自己和其他阅读代码的人——这个变量的引用从声明后就不会改变,减少不必要的认知负担; - 避免意外重赋值:如果后续不小心写出了重赋值的代码,JS引擎会直接报错,帮你提前发现问题;
- 符合最佳实践:在现代JS开发中,优先用
const,只有当确实需要给变量重新赋值时,再用let。
你的示例代码可以改成这样:
async setSetting(guildID, settingName, value) { const settingToFind = { guildID: guildID, setting: settingName }; /* 函数内未对settingToFind进行重赋值的其他代码... */ }
再澄清一个常见误区:
很多人以为const只能用来声明“不可变的常量”,比如const PI = 3.14159,但对于对象、数组这类引用类型,const只是限制变量不能被重新赋值,修改它们的内部属性/元素是完全允许的,比如:
const user = { name: 'Alice' }; user.name = 'Bob'; // 完全合法,因为没有改变user变量的引用 // user = { name: 'Charlie' }; // 这里才会报错,因为给user重新赋值了
总结一下:你的场景里用const是最优解,既符合语法规则,也能更好地表达代码逻辑~
内容的提问来源于stack exchange,提问作者user11340571




