const能防止重写,因其创建不可重新赋值的常量引用,绑定后无法用=赋新值;但不冻结函数内部逻辑、prototype或自有属性。

用 const 声明函数表达式,能有效防止变量名被重新赋值(即“重写”),但要注意:它保护的是**绑定本身**,不是函数内部逻辑或其属性。
为什么 const 能防止重写?
const 声明创建的是一个**不可重新赋值的常量引用**。一旦绑定到某个值(比如一个函数),就不能再用 = 给它赋新值。
例如:
const sayHello = function() { return 'Hello'; };
sayHello = function() { return 'Hi'; }; // TypeError: Assignment to constant variable.
const 函数表达式 vs function 声明
两者行为不同:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
const say = function() {...}:函数表达式,必须先声明后调用;作用域是块级;不能重复赋值。 -
function say() {...}:函数声明,会被提升(hoisted);可被同名函数声明覆盖(在非严格模式下);不具防重写能力。
注意:const 不冻结函数本身
const 只阻止变量重新指向另一个值,但不阻止:
- 修改函数的
prototype(如sayHello.prototype.newMethod = ...) - 给函数添加/修改自有属性(如
sayHello.version = '2.0') - 如果函数返回对象,该对象仍可被修改(除非额外用
Object.freeze())
想真正锁定函数?可以组合使用
若需更严格的防护(如禁止扩展、修改属性),可配合 Object.freeze():
const sayHello = Object.freeze(function() { return 'Hello'; });
sayHello.name = 'hi'; // 无效(严格模式下报错,非严格下静默失败)
不过日常开发中,仅用 const 已足够防止误覆盖——这是最常见也最关键的防护场景。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










