JavaScript 进阶基础:函数、作用域与常用技巧总结

目录

一、函数到底解决了什么问题?

二、函数的基本用法

[1. 声明函数](#1. 声明函数)

[2. 调用函数](#2. 调用函数)

[3. 一个更实际的例子](#3. 一个更实际的例子)

三、参数:让函数变得灵活

参数使用建议

四、返回值:函数的输出

[关于 return,有几个关键点:](#关于 return,有几个关键点:)

五、作用域:变量到底能在哪里用?

[1. 全局作用域](#1. 全局作用域)

[2. 局部作用域(函数作用域)](#2. 局部作用域(函数作用域))

[3. 查找规则](#3. 查找规则)

[⚠️ 一个坑(不推荐写法)](#⚠️ 一个坑(不推荐写法))

六、匿名函数

[1. 函数表达式](#1. 函数表达式)

[2. 立即执行函数(IIFE)](#2. 立即执行函数(IIFE))

七、核心总结

[1. 函数](#1. 函数)

[2. 参数 & 返回值](#2. 参数 & 返回值)

[3. 作用域](#3. 作用域)

[4. 匿名函数](#4. 匿名函数)


一、函数到底解决了什么问题?

写代码时很容易遇到一种情况:

复制代码
console.log('嗨~')
console.log('嗨~')
console.log('嗨~')

如果某段逻辑需要重复使用,一直复制粘贴显然不是办法。

👉 这时候就需要函数。

函数的本质可以理解为:

把一段逻辑"封装"起来,需要的时候再调用


二、函数的基本用法

1. 声明函数

复制代码
function sayHi() {
  console.log('嗨~')
}

2. 调用函数

复制代码
sayHi()

👉 注意:函数声明之后不会自动执行,必须调用才会运行。


3. 一个更实际的例子

复制代码
function printStar() {
  document.write('*<br>')
  document.write('**<br>')
  document.write('***<br>')
}

printStar()
printStar()

如果不用函数,这段代码会非常冗余。


三、参数:让函数变得灵活

如果函数只能写死逻辑,那价值其实有限。

比如打招呼:

复制代码
function sayHi(name) {
  console.log('嗨~' + name)
}

sayHi('小明')
sayHi('小红')

👉 关键点:

  • name形参(形式参数)
  • '小明'实参(实际参数)

可以理解为:

形参 = 函数内部的变量

实参 = 给变量赋的值


参数使用建议

  • 参数顺序要一致
  • 尽量保证"传几个参数,定义几个参数"

四、返回值:函数的输出

函数不仅可以执行逻辑,还可以"返回结果"。

复制代码
function sum(a, b) {
  return a + b
}

let result = sum(5, 10)

关于 return,有几个关键点:

  1. return 用于返回结果
  2. 一旦执行 return,函数立即结束
  3. 一个函数通常只写一个 return
  4. 没写 return → 默认返回 undefined

五、作用域:变量到底能在哪里用?

可以简单理解为:

变量在哪个范围内有效


1. 全局作用域

复制代码
let num = 10
  • 在整个文件中都可以使用
  • 生命周期比较长

2. 局部作用域(函数作用域)

复制代码
function test() {
  let num = 20
}
  • 只能在函数内部使用
  • 外部访问不到

3. 查找规则

👉 变量查找遵循:

先找局部 → 再找全局

例如:

复制代码
let num = 10

function test() {
  let num = 20
  console.log(num)
}

test() // 输出 20

⚠️ 一个坑(不推荐写法)

复制代码
function test() {
  num = 100
}

👉 这会变成全局变量,非常危险,实际开发中一定要避免。


六、匿名函数

除了普通函数,还有一种更灵活的写法。


1. 函数表达式

复制代码
let fn = function() {
  console.log('函数表达式')
}

fn()

👉 特点:

  • 没有函数名
  • 通过变量调用

2. 立即执行函数(IIFE)

复制代码
(function() {
  console.log('立即执行')
})()

或者:

复制代码
(function() {
  console.log('立即执行')
}())

👉 特点:

  • 定义完立刻执行
  • 不需要手动调用
  • 常用于隔离作用域(避免变量污染)

七、核心总结

1. 函数

  • 用来封装代码,提高复用性
  • 写完必须调用才执行

2. 参数 & 返回值

  • 参数 → 输入
  • return → 输出

👉 函数 = 输入 → 处理 → 输出


3. 作用域

  • 局部优先
  • 避免污染全局变量

4. 匿名函数

  • 更灵活的写法
  • 在实际开发(回调、事件)中大量使用
相关推荐
kyriewen8 小时前
别再 console.log 了:5 个 Chrome DevTools 调试技巧,用过就回不去了
前端·javascript·面试
IT_陈寒10 小时前
Python搞不定字符串编码?这破玩意坑我两小时!
前端·人工智能·后端
To_OC10 小时前
LC 1 两数之和:面试第一道必考题,暴力解法直接被面试官 pass
javascript·算法·leetcode
DigitalOcean11 小时前
Laravel 开发者已在 DigitalOcean 上开通超过 10 万台服务器
前端·laravel
星始流年11 小时前
从 Tool 到 Skill——基于 LangChain 的服务端Skill实现
前端·langchain·agent
李惟11 小时前
开源本地通信库,纯客户端 RPC,像聊天一样通信
前端
YAwu1111 小时前
深入解析 React 炫彩鼠标跟随标题组件:从坐标定位到动画性能
前端·react.js
GuWenyue11 小时前
排序效率低?5分钟吃透快速排序,性能飙升至O(nlogn)
前端·javascript·面试
OpenTiny社区11 小时前
🎨 看完 GenUI SDK 源码我悟了!
前端·vue.js·github
叁两11 小时前
前端转型AI Agent该如何学习?(前置篇)
前端·人工智能·node.js