什么是副作用(Side Effects)

副作用指的是函数执行时,除了返回值之外,还对函数外部产生了影响的操作。

常见的副作用类型

类型 示例 说明
修改外部变量 count++、formData.value.name = '' 改变了函数外部的状态
DOM 操作 document.title = 'xxx'、element.style.color = 'red' 修改了页面
网络请求 fetch()、axios.get() 与外部服务通信
定时器 setTimeout()、setInterval() 影响程序执行流程
控制台输出 console.log() 输出到外部环境
本地存储 localStorage.setItem() 修改浏览器存储
发送事件 emit('update')、eventBus.emit() 通知外部组件

对比示例

复制代码
// ✅ 纯函数:没有副作用,只计算并返回值
function add(a, b) {
  return a + b
}

// ❌ 有副作用:修改了外部变量
let total = 0
function addToTotal(value) {
  total += value  // 副作用:修改外部变量
  return total
}

// ❌ 有副作用:发起网络请求
function fetchUser(id) {
  return axios.get(`/api/user/${id}`)  // 副作用:网络请求
}

// ❌ 有副作用:修改 DOM
function updateTitle(title) {
  document.title = title  // 副作用:修改 DOM
}

Vue 中的例子

复制代码
// ✅ computed:纯函数,只计算返回值
const fullName = computed(() => {
  return firstName.value + ' ' + lastName.value
})

// ❌ computed 中不应该有副作用
const fullName = computed(() => {
  console.log('计算中...')  // 副作用
  otherValue.value = 'xxx'  // 副作用
  return firstName.value + ' ' + lastName.value
})

// ✅ watch:专门用于处理副作用
watch(isChecked, (newVal) => {
  inputValue.value = ''      // 修改其他数据
  console.log('状态变化')    // 控制台输出
  saveToServer(newVal)       // 网络请求
})

总结

纯函数: 相同输入 → 相同输出,不影响外部世界

副作用: 函数执行时,对外部世界产生了影响

相关推荐
我爱加班、、3 分钟前
Websocket能携带token过去后端吗
前端·后端·websocket
AAA阿giao3 分钟前
从零拆解一个 React + TypeScript 的 TodoList:模块化、数据流与工程实践
前端·react.js·ui·typescript·前端框架
C++ 老炮儿的技术栈3 分钟前
VS2015 + Qt 实现图形化Hello World(详细步骤)
c语言·开发语言·c++·windows·qt
杨超越luckly9 分钟前
HTML应用指南:利用GET请求获取中国500强企业名单,揭秘企业增长、分化与转型的新常态
前端·数据库·html·可视化·中国500强
派葛穆10 分钟前
Python-批量安装依赖
开发语言·python
MSTcheng.22 分钟前
【C++】C++11新特性(二)
java·开发语言·c++·c++11
晓131325 分钟前
第七章 【C语言篇:文件】 文件全面解析
linux·c语言·开发语言
愚者游世25 分钟前
Delegating Constructor(委托构造函数)各版本异同
开发语言·c++·程序人生·面试·改行学it
梵刹古音27 分钟前
【C语言】 指针基础与定义
c语言·开发语言·算法
Ekehlaft30 分钟前
这款国产 AI,让 Python 小白也能玩转编程
开发语言·人工智能·python·ai·aipy