导读:本期聚焦于小伙伴创作的《JavaScript函数声明和函数表达式有什么区别和相同点》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《JavaScript函数声明和函数表达式有什么区别和相同点》有用,将其分享出去将是对创作者最好的鼓励。

JavaScript中定义函数主要有函数声明和函数表达式两种方式,二者在语法形式、执行机制、使用限制等方面存在明显差异,同时也具备函数作为JavaScript一等公民的共同特性。

JavaScript函数声明和函数表达式有什么区别和相同点

相同点

函数声明和函数表达式定义出来的都是JavaScript函数对象,都具备函数的基本特性:可以接收参数、可以返回值、可以作为参数传递给其他函数、也可以作为其他函数的返回值,同时都支持函数内部的作用域隔离,拥有自己的arguments对象和this绑定规则。

不同点

1. 语法形式不同

函数声明的语法是直接使用function关键字加函数名定义,不需要赋值给变量:

// 函数声明
function add(a, b) {
    return a + b;
}

函数表达式则是将函数赋值给一个变量,函数可以是匿名函数也可以是有名函数:

// 匿名函数表达式
const sum = function(a, b) {
    return a + b;
};

// 有名函数表达式
const multiply = function calcMultiply(a, b) {
    return a * b;
};

2. 变量提升表现不同

函数声明会被JavaScript引擎整体提升,在代码执行前就已经可以被调用,无论声明位置在函数调用之前还是之后:

// 函数调用在声明之前,依然可以正常执行
console.log(add(1, 2)); // 输出3

// 函数声明
function add(a, b) {
    return a + b;
}

函数表达式本质是变量赋值,只会提升变量声明,不会提升函数赋值,在赋值之前调用会报错:

// 此时sum只是被声明,值为undefined,调用会报错
console.log(sum(1, 2)); // 报错:sum is not a function

// 函数表达式
const sum = function(a, b) {
    return a + b;
};

3. 函数名的作用域不同

函数声明的函数名在当前作用域全局可用,可以在函数外部直接通过函数名调用:

function test() {
    console.log('函数声明调用');
}
test(); // 正常执行

有名函数表达式的函数名只在函数内部可访问,外部无法通过该函数名调用:

const test = function innerTest() {
    console.log(innerTest); // 内部可以访问innerTest,输出函数本身
};
innerTest(); // 报错:innerTest is not defined

4. 使用场景差异

函数声明适合定义需要提前调用、逻辑相对独立的工具函数,不需要依赖其他变量赋值完成就可以使用。函数表达式更适合需要动态定义函数、或者函数作为值传递的场景,比如事件回调、高阶函数的参数等,也适合配合const关键字定义不会被重新赋值的函数,避免函数被意外覆盖。

总结

函数声明和函数表达式的核心差异集中在提升机制、语法形式和函数名作用域上,相同点则是二者都属于JavaScript函数定义方式,具备函数的所有基础特性。开发者可以根据是否需要提前调用、是否需要函数名仅在内部可用等需求,选择合适的函数定义方式,提升代码的可读性和稳定性。

JavaScript函数声明函数表达式函数定义hoisting修改时间:2026-07-13 02:12:18

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。