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