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

动态作用域示例争议:为何我与Bing AI的输出判断不一致?

动态作用域的代码结果分析

首先明确动态作用域的核心规则:变量引用时,会沿着函数的调用栈向上查找,优先使用调用链中上层函数环境里的变量,而非函数定义时的上层环境。

针对你提供的伪代码,我们按动态作用域规则逐步推导:

x = 10
function f() {
  x = 20
  function g() {
    print x
  }
  g()
}
function h() {
  x = 30
  f()
}
h()
  1. 初始全局环境中,x = 10。
  2. 调用h():
    • 由于h()内未声明局部x,赋值x = 30会修改调用h()的上层环境(全局环境)中的x,此时全局x变为30。
    • 接着调用f():
      • f()内同样未声明局部x,赋值x = 20会修改调用f()的上层环境(全局环境)中的x,此时全局x变为20。
      • 调用g():
        • g()引用x时,沿调用栈向上查找:先看f()的环境(无局部x),再看h()的环境(无局部x),最终找到全局环境中的x = 20,因此输出20。

你的理解是正确的,这段代码在标准动态作用域规则下应输出20。Bing AI的结论有误,可能是混淆了动态作用域的查找逻辑,或是对伪代码的变量声明规则做了错误假设。

内容的提问来源于stack exchange,提问作者Jeff Boker

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 15:27:44