如何把一堆 js 执行结果封装成一个 json 给外界访问?

作者站长头像
站长
· 阅读数 10

首先在 index.html 定义了两个 js 文件的加载顺序

<!DOCTYPE html>
<html>

    <head>
        <title></title>
    </head>

    <body>
        <script src="before.js"></script>
        <script src="end.js"></script>
    </body>

</html>

两个 js 细节如下

before.js

const a = 1;

const b = a + 1;

const c = {
    a: a,
    b: b
};

end.js

console.log(c); // { a: 1, b: 2 }

需求

  • 在 before.js 执行完毕后只保留对象 c
  • a, b 销毁, 也就是说这两个对象不要被 end.js 访问到

尝试过的方法

方法一. 使用匿名函数

before.js

(function() {
    const a = 1;
    const b = a + 1;
    const c = {
        a: a,
        b: b
    };
})();

失败 : 因为这只是一个方法体结束后全部都没了所以在 end.js 中就报错 Uncaught ReferenceError: c is not defined如果我想让这个函数执行完毕后返回一个c, 给 end.js 访问, 这种写法支持吗? 试了一下

before.js

(function() {
    const a = 1;
    const b = a + 1;
    const c = {
        a: a,
        b: b
    };
    return c;
})();

还是不行, 在 end.js 中获取不到 c

方法二. 直接定义成一个对象, 也就数说让 before.js 里面只有一个 const c, 并将所有细节都放到 c 中

before.js

const c = {
    a: ,
    b: 
}

这样写在 end.js 中确实只能访问 c 了, 但是 before.js 中就有问题了给 c.b 赋值需要用到 c.a, 而这个时候 c.a 不存在, 那就赋值不了不能把 a 定义在外面, 因为需求是 before.js 执行完毕后只保留一个 c 给外界访问应该如何实现呢?

回复
1个回答
avatar
test
2024-07-14

闭包。

const fn = () => {
    const a = 1;
    const b = 2;
    return a+b;
}
let c = fn();
回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容