函数声明与函数表达式的区别总结

夏敏酱_3998

夏敏酱_3998

2026-07-16

333人浏览

原创

函数声明整块提升、可先调用后定义,函数表达式仅变量声明提升(var)或不提升(let/const),必须先定义后调用;前者只能出现在顶层或函数体,后者可嵌入任意表达式位置;前者名称全局可见,后者内部名仅限函数体内使用。

函数声明与函数表达式的区别总结

函数声明和函数表达式表面都是定义函数,但行为逻辑完全不同——关键不在“怎么写”,而在“什么时候绑定”和“能不能提前用”。

提升行为:一个整块提前,一个只留空名

函数声明在代码执行前就完成整个定义的注册,名字和函数体一起被“拎到”作用域顶部,所以可以先调用后写声明。

  • function say() { console.log('hi'); }
    say(); // ✅ 正常输出
  • var fn = function() { console.log('bye'); };
    fn(); // ❌ 报错,此时 fn 是 undefined
  • let fn2 = () => {};
    fn2(); // ❌ ReferenceError,let 声明不提升,直接进入暂时性死区

语法位置:一个必须独立成句,一个哪儿都能塞

函数声明只能出现在顶层或函数体内,不能直接写在 if、for、try 等块级结构里(否则行为不一致,尤其严格模式下会报错)。

Starry.ai
Starry.ai

starryai是一款可根据文字提示生成艺术图像和视频的 AI 创作应用。

下载
  • ✅ 合法:
    function foo() {}
    function bar() { function inner() {} }
  • ❌ 非标准(应避免):
    if (true) { function baz() {} } // 不同引擎处理不同
  • ✅ 函数表达式自由得多:
    if (ok) { const handler = function() { /* ... */ }; }
    [1,2].map(function(x) { return x * 2; })

命名与作用域:一个名字对外可见,一个名字只对自己有用

函数声明的名字是作用域内的正式标识符,可被外部访问;函数表达式的名称(如果写了)仅用于函数内部,比如递归或调试栈显示,外部完全不可见。

  • function greet() { console.log('hello'); }
    greet(); // ✅
    typeof greet === 'function' // ✅
  • const talk = function hello() { console.log(hello); };
    talk(); // ✅ 输出 hello 函数本身
    hello(); // ❌ ReferenceError
  • talk.name // 'hello' —— name 属性保留了内部名,但没创建新绑定

使用场景:一个适合主流程,一个适合灵活嵌套

函数声明适合定义模块级、可复用的核心逻辑;函数表达式更适合回调、IIFE、动态生成、闭包封装等需要值语义的场合。

  • IIFE 必须用表达式形式:
    (function() { console.log('run once'); })();
    +function(){}(); // 也可,靠运算符强制解析为表达式
  • 对象方法、事件监听器、数组方法参数,基本都依赖函数表达式:
    btn.addEventListener('click', function() { /* ... */ });
    const obj = { init: function() {} };
  • 箭头函数属于函数表达式变体,同样不提升、无 this、不可 new,内存创建时机与普通表达式一致

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
go语言闭包相关教程大全
go语言闭包相关教程大全

本专题整合了go语言闭包相关数据,阅读专题下面的文章了解更多相关内容。

2025.07.29

3513

19

function是什么
function是什么

function是函数的意思,是一段具有特定功能的可重复使用的代码块,是程序的基本组成单元之一,可以接受输入参数,执行特定的操作,并返回结果。本专题为大家提供function是什么的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.04

2540

5

js函数function用法
js函数function用法

js函数function用法有:1、声明函数;2、调用函数;3、函数参数;4、函数返回值;5、匿名函数;6、函数作为参数;7、函数作用域;8、递归函数。本专题提供js函数function用法的相关文章内容,大家可以免费阅读。

2023.10.07

434

5

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

2026.09.23

20

15

Buffalo框架路由与请求处理实操指南
Buffalo框架路由与请求处理实操指南

本专题讲解Buffalo框架路由与请求处理机制,涵盖路由注册与分组、资源路由、Handler编写规范、Context上下文方法、参数绑定、中间件编写挂载、Session与Cookie读写、Flash消息及错误页面定制方法。

2026.09.23

0

15

Buffalo框架零基础入门教程
Buffalo框架零基础入门教程

本专题整理Buffalo框架入门内容,涵盖Go环境准备、buffalo CLI安装、新项目生成、目录结构说明、dev热加载启动、数据库连接配置与常见报错排查,帮助新手按约定优于配置的思路跑通第一个Buffalo框架应用。

2026.09.23

0

15

Conan创建软件包配方指南
Conan创建软件包配方指南

本专题介绍通过conanfile.py创建软件包的方法,讲解包名、版本、依赖和构建设置等基础信息,以及source、build、package、package_info等常用方法的作用及编写思路。

2026.09.22

0

12

Conan二进制包配置指南
Conan二进制包配置指南

本专题介绍Conan根据操作系统、编译器、架构和构建类型生成二进制包的方法,讲解Profile、Settings、Options及Package ID的作用,帮助管理不同平台和编译环境下的包版本。

2026.09.22

20

13

Conan私有仓库搭建教程
Conan私有仓库搭建教程

本专题系统的讲解Conan私有仓库的搭建流程,涵盖仓库服务部署、存储目录配置、用户认证、权限划分和远程地址添加,并介绍内部C++依赖包的上传、下载及版本维护方法。

2026.09.22

0

19

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.6万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.2万人学习