Javascript变量提升的错误使用?

Incorrect use of Javascript Variable Hoisting?

问题

因此,我尝试在 Javascript 中使用尚未定义的变量。由于 Javascript 提升 (http://www.w3schools.com/js/js_hoisting.asp),我认为这没问题。但是,在尝试使用此技术时,我收到 'engine.level.tileSize' 的未定义错误。我想知道这是不是因为它是对象的一部分...还是因为它不是函数的明确部分?

代码

(为了简洁而缩短,这是一个包含完整工作代码的 codepen - http://codepen.io/anon/pen/QjKaVG - 注意:虽然代码在本地完全工作,但由于缺少图像资产,它无法在 codepen 上工作。)

上面的代码是我的工作版本。但是,当我尝试将几行更改为以下内容时,问题就变得很明显了;

// -------------------------------------------------------------------------------
// VIEWPORT CLASS
// -------------------------------------------------------------------------------
engine.viewport        = {};
engine.viewport.width  = 15 * engine.level.tileSize;
engine.viewport.height = 8 * engine.level.tileSize;

// -------------------------------------------------------------------------------
// LEVEL CLASS
// -------------------------------------------------------------------------------
engine.level = {};
engine.level.tileSize = 32;

任何人都可以阐明这里发生的事情以及我如何解决这个问题吗?

非常感谢。

提升只声明变量和函数。

您不能在对象存在之前引用该对象(并访问其属性的值)。