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

函数嵌套中变量/参数/函数的可见性(作用域)问题求解

作用域测试题解析

测试题内容

测试你对变量可见性的理解。

测试代码

var outside = 'outside';

function a() {
  var aVar = 'a';

  function aInner1() {
    var aInner1Var = 'aInner1Var';

    function aInner1Inner() {
      var aInner1InnerVar = 'aInner1InnerVar'; 
    }
  }

  function aInner2(aInner2Param) {
    var aInner2Var = aInner2Param;
  }
}

function b(bParam) {
  console.log(bParam);
}

选择题(可多选)

    1. a对b可见
    1. b和bParam对a可见
    1. aInner1InnerVar仅对aInner1Inner和aInner1可见
    1. aInner1InnerVar对aInner1Inner可见
    1. aVar对aInner2可见
    1. aInner1Var对aInner2可见
    1. aInner2Param对aInner1可见

我的现有思路

  • 局部函数可以访问父函数的内容,但不确定是否仅能访问函数名还是也能访问参数、变量等;
  • 所有函数都能访问全局变量。

我尝试的伪代码

function one() {            // one can see oneA, oneB, oneAB, two
   function oneA() {        // oneA can see one, oneB  
       function oneB() {    // oneB can see one, oneA, oneB 
     }
   }
   function oneAB() {       // oneAB can see one, two
     }
}
function two() {            // two can see one
}

我的判断尝试

    1. a对b可见 // 全局作用域函数 → YES
    1. b和bParam对a可见 // 函数名a/b可见,不确定参数 → ?
    1. aInner1InnerVar仅对aInner1Inner和aInner1可见 // 块内变量对自身及外部函数可见 → ?
    1. aInner1InnerVar对aInner1Inner可见 // 块内变量对自身函数可见 → ?
    1. aVar对aInner2可见 // 函数能否访问另一个函数内的变量 → NO
    1. aInner1Var对aInner2可见 // 函数能否访问同一父函数下其他函数内的变量 → NO
    1. aInner2Param对aInner1可见 → NO

正确选项解析

  • 1. 正确:a和b都属于全局作用域,全局作用域内的所有标识符互相可见,因此b能访问a。
  • 2. 错误:b属于全局作用域,a可以看到b,但bParam是b的局部参数,仅在b的作用域内有效,a无法访问。
  • 3. 错误:aInner1InnerVar是aInner1Inner的局部变量,只有自身函数作用域能访问,aInner1作为外部函数也无法读取它。
  • 4. 正确:局部变量在自身所属的函数作用域内必然可见,这是作用域的基础规则。
  • 5. 正确:aInner2是a的嵌套函数,嵌套函数可以访问父级函数作用域中的变量,aVar属于a的作用域,因此aInner2能访问它。
  • 6. 错误:aInner1Var是aInner1的局部变量,aInner1和aInner2是同级内部函数,作用域相互独立,无法访问对方的局部变量。
  • 7. 错误:aInner2Param是aInner2的局部参数,aInner1与aInner2同级,无法跨作用域访问对方的局部内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 20:05:24