在运行 JavaScript 程序时考虑执行上下文会有所帮助。 JavaScript 计算引用(而不是直接计算值)。
全局上下文由全局变量和对象组成。在这种情况下是(在 JavaScript 解释器读取命名空间指令时):
namespace = {f} // namespace references a function
这意味着命名空间正在引用一个函数。在第一个警报中,为命名空间创建了以下执行上下文:
loca = 5 // loca references the value 5
getLocal = {f} // getLocal references a function
return { // return object with glob, blog and frog as properties
glob = { getLocal() } // references the function getLocal()
blog = 5 // blog references same value as loca: 5
frog = {f} // references anonymous function
}
因此调用了函数 glob。 glob 引用了一个名为 getLocal 的函数。 glob的执行上下文如下:
loca = 6 // loca now references the value 6
return loca // return value referenced by loca
下一个调用是 blog,这个调用返回值 5。它不引用 loca。它仅引用 loca 在创建执行上下文时所具有的值。在创建执行上下文时,loca 引用了 5,因此 blog 引用了 5。
无论你多久调用一次 glob,blog 仍然会引用 5 的值。
在最后一个警告语句中调用了青蛙。 frog 引用了一个现在正在执行的匿名函数。 frog的执行上下文如下
return loca // Go and get the value that is referenced by loca
基本上就是这样。每当您认为价值时,请尝试考虑“对价值的引用”。这有助于习惯它。并尝试在程序运行时可视化执行上下文(例如作为人工调试器)。