javascript - 从外部访问闭包内定义的 var(即定义闭包的范围)

标签 javascript scope

对于背景,我目前正在播放 Untrusted ,一种基于 JavaScript 的编程游戏,其核心机制是编辑代码以修改游戏世界以向前推进。我通过使用记录的游戏内 API 修改我在本地范围内给出的变量,以“预期”的方式解决了大多数关卡。但是,我想知道是否还有一些“意想不到的”方法可以通过钓鱼来修改游戏状态/游戏定义。

很多游戏的代码如下(在window范围内计算):

function foo() {
    var bar = 1234;
}

我知道我可以通过引用 window.foo 从任何范围访问 foo。有没有一种方法可以访问 foo 中的 bar,即使它没有明确公开?

澄清一下,上面的代码已经为我评估了(我相信在 window 范围内,所以我至少可以获得对 foo 的引用)。我无法更改评估的内容。 (我想我可以重新定义 foo 如果我真的想要的话,那会绕过很多限制,但这与当前的提问方向无关。)相反,我的目标是,鉴于这已经是评估,就地修改它(例如为 bar 设置一个新值)。

提前致谢!

最佳答案

简短的回答是

不可能在其范围/闭包之外访问局部变量(请注意,由于闭包,可能有多个范围可以访问单个局部变量)。


对于长答案,请参阅此答案以了解范围如何工作:javascript can't access private properties .

关于javascript - 从外部访问闭包内定义的 var(即定义闭包的范围),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31779504/

相关文章:

javascript - 访问外部变量

Javascript .click() 回调函数显然没有在 Bootstrap Accordion 中调用?

Javascript 和 Regex - 字符串中单词的严格匹配

javascript - 将 Typescript 转换为 Javascript 的最佳实践

r - 使用变量对 data.table 进行子集化(当 varname 与 colname 相同时)

java - Spring批处理: org. springframework.beans.factory.BeanCreationException:使用JobScope时创建名称为 'scopedTarget.writer'的bean时出错

C# - using 语句的位置

javascript - D3.js 从现在开始的时间刻度

javascript - 如何使用可选择的 Jquery UI 查找选定元素

javascript GUID base64 转换似乎不起作用