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

如何在闭包中访问孙级变量并调用孙级函数?

如何从闭包中获取变量并调用内部函数

1. 调用函数 z

你的代码里,p 是执行 x() 后返回的 y 函数。要调用最内层的 z 函数,需要先执行 p() 拿到 z 函数本身,再调用它:

// 先执行p(也就是y函数),得到z函数
const zFunction = p();
// 调用z函数,此时会打印a和b的值
zFunction(); // 控制台输出:10 20

2. 获取变量 a 和 b 的值

原代码里的 a 和 b 是函数内部的私有变量,属于闭包的私有作用域,外部无法直接访问。要拿到它们的值,需要修改原函数结构,把变量通过接口暴露出来,两种常见方案如下:

方案一:修改 z 函数,让它返回 a 和 b

function x() {
    var a = 10;
    return function y() {
        var b = 20;
        return function z() {
            console.log(a, b);
            // 返回包含a、b的对象,供外部获取
            return { a, b };
        }
    }
}
const p = x();
const zFunction = p();
// 调用z函数时拿到返回的变量值
const { a, b } = zFunction();
console.log(a); // 10
console.log(b); // 20

方案二:让外层函数返回包含变量和内部函数的对象,直接暴露访问接口

function x() {
    var a = 10;
    return {
        // 暴露获取a的方法
        getA: () => a,
        // 返回修改后的y函数,同时暴露b和z
        y: function() {
            var b = 20;
            return {
                getB: () => b,
                z: function() {
                    console.log(a, b);
                }
            }
        }
    }
}
const p = x();
// 获取a的值
console.log(p.getA()); // 10
const yResult = p.y();
// 获取b的值
console.log(yResult.getB()); // 20
// 调用z函数
yResult.z(); // 控制台输出:10 20

简单说,你写的是嵌套闭包结构——每一层函数都会保留外层的变量环境,所以 z 能访问 a 和 b,但这些变量默认是私有的,必须通过主动暴露的函数接口才能让外部获取。

内容的提问来源于stack exchange,提问作者Soumya Sagnik Khanda

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 00:16:08