🎬 HoRain云小助手:个人主页
🔥 个人专栏: 《Linux 系列教程》《c语言教程》
⛺️生活的理想,就是为了理想的生活!
⛳️ 推荐
前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。
专栏介绍
专栏名称 | 专栏介绍 |
《C语言》 | 本专栏主要撰写C干货内容和编程技巧,让大家从底层了解C,把更多的知识由抽象到简单通俗易懂。 |
《网络协议》 | 本专栏主要是注重从底层来给大家一步步剖析网络协议的奥秘,一起解密网络协议在运行中协议的基本运行机制! |
《docker容器精解篇》 | 全面深入解析 docker 容器,从基础到进阶,涵盖原理、操作、实践案例,助您精通 docker。 |
《linux系列》 | 本专栏主要撰写Linux干货内容,从基础到进阶,知识由抽象到简单通俗易懂,帮你从新手小白到扫地僧。 |
《python 系列》 | 本专栏着重撰写Python相关的干货内容与编程技巧,助力大家从底层去认识Python,将更多复杂的知识由抽象转化为简单易懂的内容。 |
《试题库》 | 本专栏主要是发布一些考试和练习题库(涵盖软考、HCIE、HRCE、CCNA等) |
目录
⛳️ 推荐
专栏介绍
💡 函数的核心要素
🔗 理解作用域与闭包
➿ 高级函数概念
✅ 最佳实践与选择建议
JavaScript 函数是可重复使用的代码块,用于执行特定任务或计算值,它能提高代码的复用性、可读性和可维护性。
下面这个表格帮你快速了解三种主要的函数定义方式及其核心区别。
特性 | 函数声明 (Function Declaration) | 函数表达式 (Function Expression) | 箭头函数 (Arrow Function) |
|---|---|---|---|
语法 |
|
|
|
提升 (Hoisting) | ✅ 整体提升,可先调用后声明 | ❌ 仅变量声明提升,赋值不提升 | ❌ 同函数表达式 |
函数名 | 必须有(具名) | 可匿名,也可具名(便于调试) | 匿名 |
| 动态绑定,取决于调用方式 | 动态绑定,取决于调用方式 | ❌ 继承自外层词法作用域 |
作为构造函数 | ✅ 可使用 | ✅ 可使用 | ❌ 不可使用 |
| ✅ 有 | ✅ 有 | ❌ 无 |
💡 函数的核心要素
参数(Parameters):函数定义时用来接收外部传入值的变量,使函数更灵活。
默认参数:ES6 允许为参数设置默认值,避免因未传参而出现
undefined。function greet(name = "Guest") { console.log(`Hello, ${name}!`); } greet(); // Hello, Guest! greet("Alice"); // Hello, Alice!剩余参数:使用
...语法将多个独立参数收集为一个数组,便于处理不定数量的参数。function sum(...numbers) { return numbers.reduce((acc, curr) => acc + curr, 0); } console.log(sum(1, 2, 3)); // 6
返回值(Return Value):函数通过
return语句将处理结果返回给调用者。若无return,函数默认返回undefined。function square(number) { return number * number; } let result = square(5); // result 的值为 25
🔗 理解作用域与闭包
作用域:决定了变量和函数的可访问范围。函数内部声明的变量(局部作用域)在函数外部通常无法访问。
闭包:是 JavaScript 一个强大且重要的特性。如果一个函数引用了其外部作用域的变量,即使外部函数已经执行完毕,内部函数仍然可以访问和操作那些变量。闭包常用于数据封装和创建私有变量。
function createCounter() { let count = 0; // count 变量在外部是无法直接访问的 return { increment: function() { count++; return count; }, getCount: function() { return count; } }; } const counter = createCounter(); console.log(counter.increment()); // 1 console.log(counter.getCount()); // 1
➿ 高级函数概念
高阶函数:指接收另一个函数作为参数,或将函数作为返回值的函数。数组方法如
map(),filter(),reduce()就是典型的高阶函数。const numbers = [1, 2, 3]; const doubled = numbers.map(num => num * 2); // map 接收一个函数作为参数 console.log(doubled); // [2, 4, 6]回调函数:作为参数传递给另一个函数,并在特定条件或异步操作完成后被调用的函数。
function fetchData(callback) { setTimeout(() => { callback("Data received!"); }, 1000); } fetchData((data) => { console.log(data); }); // 一秒后输出 "Data received!"
✅ 最佳实践与选择建议
选择哪种方式定义函数?
一般情况:优先使用函数声明,语法简单直观,且支持提升。
需要动态赋值或作为回调:使用函数表达式。
需要固定
this指向或编写简短函数:使用箭头函数,尤其在数组方法和需要明确词法this绑定的场景。
保持函数纯净:尽可能使用纯函数,即相同的输入总是产生相同的输出,且不产生副作用(如修改外部变量),这能使代码更易预测和测试。
使用描述性的函数名:好的函数名能显著提升代码可读性。
希望这份详细的梳理能帮助你牢固掌握 JavaScript 函数。如果你对某个特定概念(如闭包或高阶函数)有更深的兴趣,我们可以继续深入探讨。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄
💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍
🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙