如何把一堆 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 给外界访问应该如何实现呢?
回复
1个回答

test
2024-07-14
闭包。
const fn = () => {
const a = 1;
const b = 2;
return a+b;
}
let c = fn();
回复

适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容