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. 匿名函数

  • 更灵活的写法
  • 在实际开发(回调、事件)中大量使用
相关推荐
胡萝卜术8 小时前
从API调用到手写LRU:力扣146「LRU缓存」的哈希表+双向链表终极进化之路
前端·javascript·面试
科技道人8 小时前
记录 默认置灰/禁用 app ‘Search Engine Selector‘ 的disable按钮
开发语言·前端·javascript
天疆说8 小时前
Zotero Connector 在 Edge 里找不到桌面 Zotero(Linux / Zotero 9.0.6 / Edge 150)
linux·前端·edge
李伟_Li慢慢10 小时前
02-从硬件说起WebGL
前端·three.js
逝水无殇11 小时前
C# 异常处理详解
开发语言·后端·c#
kyriewen11 小时前
看了微软几万人用AI编程的数据——效率涨24%的代价没人提
前端·ai编程·claude
2601_9637713711 小时前
How to Scale Your WordPress Store Traffic in 2026
前端·php·plugin
亿元程序员11 小时前
老板说我的3D箭头游戏用来做试玩太普通了,没人想玩,让我变点花样...
前端
李伟_Li慢慢12 小时前
01-threejs架构原理-课程简介
前端·three.js
玖玥拾12 小时前
C# 语言进阶(十五)C# 游戏服务端 MySQL 数据库
服务器·开发语言·网络·数据库·mysql·c#