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

首先在 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 给外界访问
应该如何实现呢?

阅读 2k
2 个回答
✓ 已被采纳

闭包。

const fn = () => {
    const a = 1;
    const b = 2;
    return a+b;
}
let c = fn();

补充, 模块化 JS 实现

index.html

<script type="module" src="end.js"></script>

before.js

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

export default { c }

end.js

import before from './before.js';

console.log(before.c); // { a: 1, b: 2 }
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏