You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

判断给定add()函数是否具有引用透明性及相关定义疑问

判断add()函数的引用透明性

首先,先明确引用透明性的核心判定标准:

  • 函数在相同输入参数下,每次调用必须返回完全相同的结果
  • 函数执行过程中不能产生任何可观察的副作用(比如修改全局变量、修改传入参数、IO操作等)
  • 满足以上两点时,函数调用可以被其返回值直接替换,且整个程序的行为完全保持不变

接下来分析你给出的代码:

const appState = { runningTotal: 0 }
function add(x, y) {
  const total = x + y;
  appState.runningTotal += total;
  return total;
}

这个add()函数不具备引用透明性,原因很简单:

  • 它在执行过程中修改了全局变量appState.runningTotal,这是一个明确的可观察副作用
  • 举个实际场景:
    1. 第一次调用add(1, 2),返回3,同时appState.runningTotal变为3
    2. 第二次调用add(1, 2),依然返回3,但appState.runningTotal变为6
  • 如果我们尝试把add(1, 2)替换成它的返回值3,程序里appState.runningTotal根本不会被修改,这和直接调用函数的行为完全不一致——这就违反了引用透明性的核心要求

内容的提问来源于stack exchange,提问作者Chase Miller

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:27:47