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;
任何人都可以阐明这里发生的事情以及我如何解决这个问题吗?
非常感谢。
提升只声明变量和函数。
您不能在对象存在之前引用该对象(并访问其属性的值)。
问题
因此,我尝试在 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;
任何人都可以阐明这里发生的事情以及我如何解决这个问题吗?
非常感谢。
提升只声明变量和函数。
您不能在对象存在之前引用该对象(并访问其属性的值)。