js函数与封装详细解答

一、到底什么是 JS 函数,为什么需要函数

通俗来讲,函数就是把一段完成特定任务的代码打包装起来,给它起个名字。以后想要执行这段逻辑,不需要重新抄写一遍代码,直接调用这个名字就可以运行。

没有函数的时候,同样的业务逻辑,我们要复制粘贴很多遍。一旦需求变动,每一处复制的地方都要修改。不仅写代码慢,还很容易产生 bug。

函数的价值:一次编写,随处调用。重复执行的逻辑交给函数处理。

JS 里面函数分为两大类:

内置函数:JS 语言原生自带,浏览器提供,直接调用,比如console.log()。不用我们自己写,开箱即用。

自定义函数:我们根据业务自己编写,也是学习的重点。

二、JS 函数几种定义方式,通俗易懂讲解

  1. 函数声明(最常用,新手优先用这个)

使用 function 关键字,起函数名字,括号写参数,大括号内部写函数体。

函数声明可以先调用,后定义,JS 会做提升处理。

结构拆解:

function 函数名 (参数 1, 参数 2){

// 函数体:真正要执行的代码

//return 返回结果

}

函数名:见名知意,动词开头,比如 getSum、checkPhone,不要用 a、b 这种无意义名字。

小括号参数:相当于函数的输入,外部传给函数的数据,可以没有参数,也可以多个。

大括号函数体:功能实现的全部代码。

return:把函数内部计算好的数据返回出去。如果不写 return,函数默认返回 undefined。

  1. 函数表达式

把函数赋值给一个变量。这种方式不能先调用后定义,不会变量提升。

js

运行

const 变量名 = function(){

}

  1. 箭头函数 ES6 新增

简写形式,适合回调、简短逻辑。箭头函数没有自己的 this,也不能做构造函数。

三、参数详解,新手最容易踩坑

参数分为形参和实参,很多同学分不清。

形参:写在函数定义小括号里面,相当于占位的变量。

实参:调用函数的时候,小括号传入真实的数据,传给形参。

  1. 无参函数

不需要外部传入数据,函数内部逻辑固定。调用的时候括号里面什么都不写。

  1. 有参函数

传入不同实参,函数就处理不同的数据,灵活性最高。

注意:如果定义写了 2 个形参,调用只传 1 个实参,那么第二个形参的值就是 undefined,很容易引发错误。

  1. 默认参数 ES6

定义形参的时候直接赋值默认值。调用不传这个参数,就自动使用默认值,防止 undefined 报错。

示例理解:定义函数接收姓名,年龄默认 20。调用只传姓名,年龄自动为 20;如果传入年龄,就覆盖默认值。

  1. 剩余参数 ...rest

当不确定会传入多少个参数的时候使用,会把所有传入参数收集成数组。

四、return 返回值重点,分清 console.log 和 return

这是新手头号误区!

console.log 仅仅是打印输出到控制台给人看,打印出来的数据,外部代码拿不到,不能参与后续运算。

return 才是把函数内部计算结果返回给外部。调用函数得到的结果,可以赋值变量、参与运算、传给别的函数。

执行 return 之后,函数会立刻终止,return 后面的代码不会再运行。

重要口诀:想看效果打印 log;想要拿到结果继续处理,一定要 return。

五、作用域,写函数绕不开的概念

作用域就是变量可以访问的范围。

全局作用域:函数外面定义的变量,整个 JS 文件任何地方都可以访问。全局变量不要随便创建,容易命名冲突,污染全局。

函数局部作用域:在函数内部用 let/const 声明的变量,只能在函数大括号内部使用。函数外面访问不到。函数执行完毕,局部变量就销毁释放内存。

坑点:函数内部不使用 let、const 直接赋值的变量会变成全局变量,非常不好,严禁这么写。

六、什么是 JS 代码封装?不要简单等同于写函数

很多人以为封装就是写函数,这句话不完全正确。

封装是编程思想:隐藏内部复杂实现细节,只暴露简单对外接口。

别人使用这个功能,只需要知道:调用哪个函数、需要传什么参数、会得到什么返回结果。不需要看懂函数内部一堆复杂循环判断。

函数是封装最小单元。后续对象、类、模块化,都是封装思想的延伸。

封装带来 4 个好处

代码复用:通用逻辑只写一次,多处调用,消除大量重复代码。

便于维护修改:逻辑只存在一处。修改需求、修复 bug,只修改函数内部,所有调用位置自动生效,不用到处改代码。

隔离作用域:局部变量不会污染全局命名空间,减少变量冲突。

可读性提升:一个函数只干一件事,看函数名就知道功能,不用通读一堆细节代码。

JS 函数封装黄金规范(实战必看)

单一职责原则:一个函数只做一件事情。不要把查询数据、DOM 渲染、弹窗提示全部塞到同一个函数。功能多就拆分成多个小函数互相调用。

命名规范:动词 + 名词,见名知意。比如 checkMobile 校验手机号,calcTotal 计算总价。拒绝 func1、aaa 这种命名。

尽量减少全局变量,多用函数内部局部变量。

通用计算逻辑优先 return 返回结果,函数内部少写 console.log。展示交给调用方处理。

参数不要过多,参数太多可以封装成对象传参。

函数内部做好简单容错,比如判断传入数据是否合法,避免异常报错。

相关推荐
無名路人18 分钟前
小程序点餐页吸顶滚动之分类按需加载,上划切换
前端·vue.js·微信小程序
竹林8181 小时前
把神经网络塞进一个浏览器标签页:端侧视觉 AI 的工程真相
前端·浏览器
乘风gg1 小时前
别跟风 AI 副业,工程师最该学的是 AI Coding
前端·ai编程·claude
Frag0ut1 小时前
深度解析:Chrome 自启动与后台常驻服务的作用、关闭方法及利弊权衡
前端·chrome
OpsEye2 小时前
当企业不再只关心能不能调用模型,而是关心值不值得调用
javascript·ai编程
Amos_Web2 小时前
Rspack 源码解析(十五):Loader Runner 与 JS Loader 桥接
前端·rust·前端框架
YIAN2 小时前
从 SSE 流式到结构化输出:LangChain 三大 OutputParser 与 ToolCall 方案全实战
前端·langchain·node.js
FYKJ_20102 小时前
springboot雅集社区养老管理系统04456-计算机课程设计、毕业设计
vue.js·spring boot·python·mysql·typescript·spark·django
FYKJ_20102 小时前
express皖美特色农产品网售系统53118-计算机课程设计、毕业设计
javascript·vue.js·spring boot·mysql·typescript·spark·express
YIAN2 小时前
从 SSE 流式原理到 LangChain 结构化输出:打字机效果与 JSON 解析全方案实战
前端·langchain