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

为何函数value()无法访问调用它的函数内的num变量,却能访问全局num?

JavaScript作用域问题解析

你的问题核心在于JavaScript采用词法作用域(静态作用域),函数的作用域是在定义时确定的,和调用位置无关。

为什么value()访问不到xyz里的num?

value函数定义在全局作用域中,它的作用域链在定义时就固定了——只能访问自身内部和全局作用域的变量,根本触及不到xyz函数的局部作用域。哪怕你在xyz里调用它,它也不会去查找调用位置所在的局部变量,只会按自己定义时的作用域链找变量。所以xyz里的const num = 3对value来说完全不可见。

为什么能访问全局的num=100?

全局作用域是所有函数的“公共作用域”,value定义在全局,自然能访问全局变量。另外你提到全局的num写在value下方却能被访问,是因为JavaScript的变量声明提升——const num的声明会被提升到全局作用域顶部,虽然赋值100在后面,但当xyz()调用value()时,全局的num已经完成初始化,所以能正常输出。

实现预期输出的两种方法

  • 方法一:把value定义在xyz内部,让它处于xyz的作用域中:
function xyz() {
    const num = 3
    function value() {
        console.log(num)
    }
    value()
}

const num = 100
xyz() // 输出3
  • 方法二:把num作为参数传给value:
function xyz() {
    const num = 3
    value(num)
}

function value(num) {
    console.log(num)
}

const num = 100
xyz() // 输出3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 21:55:39