JavaScript函数声明必须位于脚本顶层或函数体内,不可在if/for/while等块级作用域中;命名须合法且推荐小驼峰;声明会被提升但应先声明后调用;参数缺失为undefined,多余参数被忽略,无return则默认返回undefined。

JavaScript 函数声明(function declaration)不是随便写的代码块,它有一套明确的使用规范,直接影响代码是否可运行、可维护、跨浏览器兼容。核心是:必须出现在**脚本顶层**或**函数体内**,不能嵌套在 if、for、while 等语句块中。
位置必须合法:只允许在程序级或函数级作用域
函数声明只能写在两个地方:
- 全局作用域(即最外层,不在任何函数或块中)
- 另一个函数的内部(即嵌套函数)
以下写法违反规范,ES5 及更早环境行为不一致,现代严格模式会报错或产生意外结果:
❌ 错误示例(禁止):if (true) {
function foo() { return 1; } // 块级内声明 —— 不合规
}
浏览器可能提升到外层函数或全局,但火狐与其他引擎处理方式不同,应绝对避免。
立即学习“Java免费学习笔记(深入)”;
命名需符合标识符规则,推荐小驼峰
函数名必须是合法 JavaScript 标识符:
- 不能以数字开头,可含字母、数字、下划线(_)、美元符($)
- 不能是保留字(如 class、function、return 等)
- 推荐使用小驼峰命名法(如 calculateTotal、isValidEmail),体现动词性动作
- 避免模糊缩写(如 fn、doIt),优先见名知意
声明即提升,但不可滥用提前调用
函数声明会被“提升”(hoisted)到当前作用域顶部,包括函数体本身。因此可以先调用后声明:
sayHello(); // ✅ 正常执行
function sayHello() {
console.log("Hi!");
}
但要注意:
- 提升仅适用于 function 关键字声明,不适用于函数表达式(
const fn = function() {}) - 多个同名函数声明时,后者覆盖前者,逻辑易混淆,应避免重复声明
- 虽能提前调用,仍建议按“先声明后调用”组织代码,提升可读性
参数与返回值的实用约定
声明时形参列表可为空,也可有任意个参数,但需注意:
- 实参少于形参 → 缺失参数值为 undefined
- 实参多于形参 → 多余参数被忽略(除非用
arguments或剩余参数...args显式接收) - 函数默认返回 undefined;有明确输出时,务必用
return明确返回值 - 无返回值的函数(如只做 DOM 操作)不必强加
return;,保持简洁


















