当前位置: 首页 > news >正文

石家庄哪里做微网站宁夏自治区住房与城乡建设厅网站

石家庄哪里做微网站,宁夏自治区住房与城乡建设厅网站,oppo软件商店下载安装,北京网站建设优化学校好的,这是一个非常核心的编程概念,理解它对于写出高质量代码至关重要。 我们可以从一个生活中的比喻开始。 副作用的起源:医学比喻 这个词最初来源于医学。你吃一种药是为了治疗头痛(这是药的主要作用),…

好的,这是一个非常核心的编程概念,理解它对于写出高质量代码至关重要。

我们可以从一个生活中的比喻开始。

副作用的起源:医学比喻

这个词最初来源于医学。你吃一种药是为了治疗头痛(这是药的主要作用),但这种药可能会让你犯困(这就是副作用)。

“犯困”这个效果,并不是你吃药想要达成的首要目标,但它确实发生了,并对你的状态产生了影响。


编程中的“副作用”

在编程中,一个函数或表达式的“主要作用”是计算并返回一个值

如果它在做这件事的同时,还对外部世界产生了任何可观测到的影响或改变,那么这些额外的、非返回值的“影响或改变”就是它的“副作用”(Side Effect)。

纯函数 (Pure Function) - 没有副作用的理想情况

为了更好地理解副作用,我们先看它的反面——纯函数。一个纯函数必须满足两个条件:

  1. 无副作用:它不会修改任何外部的状态。
  2. 引用透明:对于相同的输入,永远返回相同的输出。

纯函数示例:

// 这是一个纯函数
// 1. 它没有修改任何外部变量。
// 2. 无论调用多少次,只要输入是 2 和 3,输出永远是 5。
function sum(a, b) {return a + b; 
}

这个 sum 函数就像一个完美的数学公式,它的唯一职责就是根据输入计算出一个值。

带有副作用的函数 (Impure Function)

现在来看带有副作用的例子。

副作用的常见类型:

  1. 修改外部变量(最常见的副作用)

    let count = 0;// 这个函数有副作用,因为它修改了外部的 count 变量
    function increment() {count++; // <--- 这就是副作用
    }
    
  2. 修改传入的参数(如果参数是对象或数组)

    function addHobby(user, hobby) {// 这个函数有副作用,因为它修改了传入的 user 对象user.hobbies.push(hobby); // <--- 副作用
    }
    
  3. 任何 I/O 操作 (Input/Output)

    • DOM 操作document.getElementById('app').innerHTML = 'Hello';
    • 网络请求fetch('/api/data')
    • 写入磁盘或数据库
    • 打印到控制台console.log('message') (因为它与外部的“控制台”系统发生了交互)

回到 Vue 的场景:为什么要在意副作用?

现在我们可以清晰地理解为什么 Vue 对 {{ }}@click 有不同的规则了:

  • {{ }} (插值表达式) - “纯净区域”

    • 职责:它的唯一职责是像一个纯函数那样,根据当前的数据计算出一个值并显示出来
    • 为什么禁止副作用:如果 {{ }} 里的代码可以随意修改外部数据(产生副作用),那么整个应用的状态就会变得混乱且不可预测。Vue 将无法有效地追踪数据变化并优化渲染。比如 {{ count++ }},它一边要显示 count 的值(主要作用),一边又在偷偷地修改它(副作用),这就把事情搞乱了。
  • @click (事件处理器) - “副作用专区”

    • 职责:它的唯一职责就是响应用户的动作,并执行能改变程序状态的副作用
    • 为什么允许副作用:用户点击按钮,就是为了触发一个改变。比如 @click="count++",我们在这里根本不关心它的返回值,我们只关心它产生的副作用——让 count 的值加一。这正是事件处理器的天职。

总结

简单来说,“副作用”就是一个函数或表达式在“返回值”这个主要任务之外,对程序状态或外部环境所做的任何修改

在编程中,我们倾向于将有副作用的代码和无副作用的纯逻辑代码分离开来,因为这样做:

  • 提高了代码的可预测性:纯函数更容易测试和推理。
  • 便于性能优化:框架可以安全地缓存纯函数的计算结果。
  • 使代码更易于维护:职责清晰,问题排查更简单。

这正是 Vue 将“展示逻辑” ({{ }}) 和“行为逻辑” (@click) 分开的核心原因。

http://www.dtcms.com/a/542299.html

相关文章:

  • 把文件删除了怎么恢复,8个文件恢复方案找回误删除的文件
  • 做会计题目的网站酒店网站建设哪家好
  • 响应式mvc企业网站源码苏州高端网站设计机构
  • java面试-0312-ThreadLocal理解?场景?原理?
  • Go与Python在AI大模型开发中的深度对比分析
  • 大丰哪家专业做网站重庆云阳网站建设
  • BETAFLIGHT固件如何更改陀螺仪引脚适配自己画的板子,带有教程实例
  • QtQuick3D入门(6):3D粒子系统
  • MySQL窗口函数精髓:ROW_NUMBER()详解与实战指南
  • css优先级、继承、经典问题
  • 江门市智企互联网站建设四川省建设厅网站填报获奖
  • 网站营销方案软件工程师培训学校
  • 自己可以做微网站吗深圳设计功能网站
  • 【Java后端进行ai coding实践系列二】记住规范,记住内容,如何使用iflow进行上下文管理
  • 不用建网站怎么做淘宝客广西来宾网站网站建设
  • 开源html5 网站模板wordpress cdn 插件
  • 做个网站成本商务电商网站建设
  • AI Agent设计总览
  • 专业的网站建设电话东莞东城医院
  • 【LeetCode】大厂面试算法真题回忆 (145):求解连续数列
  • Zadig,USB 驱动安装工具
  • POSIX 文件锁机制
  • 深圳公司建站推广网站怎么设置二级域名
  • 从流水线工人到AI开发者:我靠执行力打破命运的循环
  • 常州手机网站效果wordpress内容主题模板
  • 福州官网建站厂wordpress如何改成中文字体
  • 新都有没有做网站的保定网站seo费用
  • 网站织梦海外医疗兼职网站建设
  • 专业做网站排名WordPress 主页分页
  • 基于多摄像头融合的智能小车自动驾驶系统完整实现