- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想这可能是重复的,但我还无法找到解释。
这是我的示例代码:
const makeCalendar = () => {
const calendar = {};
calendar.xmas = ['December', 25];
calendar.newYear = ['January', 1];
return (day) => calendar[day];
}
calendar = makeCalendar();
const xmasArray = calendar('xmas');
console.log(calendar('xmas')); // [ 'December', 25 ]
xmasArray[1]++;
console.log(calendar('xmas')); // [ 'December', 26 ]
由于 xmasArray
的元素是可变的,我可以更改 makeCalendar()
范围内的变量,从而破坏它返回的闭包。我发现解决这个问题的唯一方法是返回一个匿名数组 [...calendar[day]]
(而不是 calendar[day]
),然后阻塞makeCalendar()
中的访问。
我的问题是:这是处理这个问题的正确方法吗?有更好的方法吗?可能我没有正确理解发生了什么......
最佳答案
一种选择是使用 Object.freeze
禁止赋值给数组中的任何项目:
const makeCalendar = () => {
const calendar = {
xmas: ['December', 25],
newYear: ['January', 1]
};
Object.values(calendar).forEach(arr => Object.freeze(arr));
return (day) => calendar[day];
}
calendar = makeCalendar();
const xmasArray = calendar('xmas');
console.log(calendar('xmas'));
xmasArray[1]++;
console.log(calendar('xmas'));
请注意,这种尝试分配将在严格模式下抛出错误:
Uncaught TypeError: Cannot assign to read only property '1' of object '[object Array]
关于javascript - 返回数组/对象的闭包公开其词法上下文 : best way to tackle in JavaScript?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53775748/
已关闭。此问题旨在寻求有关书籍、工具、软件库等的建议。不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,
我正在尝试使用 python 将视频源从 Raspberry Pi 流式传输到我的机器。因此,我需要将套接字连接到服务器。(在执行这些之前,直接从 RPi 192.168.0.6:8081 流式传输视
我想这可能是重复的,但我还无法找到解释。 这是我的示例代码: const makeCalendar = () => { const calendar = {}; calendar.xmas =
我正在 Java 上使用 Cucumber + Selenium 构建我的测试套件。 现在的问题是,在用户注册时,在实际创建帐户之前会显示一系列模式对话框,但它们并不总是以相同的顺序显示或包含相同的元
比如说,我有一堆对象。我想根据形状或颜色过滤它们。 形状可以是正方形或三角形 enum Shape{ case Square, Triangle } 颜色可能是红色或绿色 enum Color{ ca
我知道像 collect() 这样的一些 Spark Actions 会导致性能问题。 已在documentation中引用 To print all elements on the driver,
我是一名优秀的程序员,十分优秀!