【问题标题】:Incorrect use of Javascript Variable Hoisting?Javascript变量提升的错误使用?
【发布时间】:2015-09-24 09:02:58
【问题描述】:

问题

所以,在定义变量之前,我尝试在 Javascript 中使用它。由于 Javascript Hoisting (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 variables canvas hoisting


    【解决方案1】:

    吊装只声明变量和函数。

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

    【讨论】:

    • 谢谢,我想这可能与此有关。你知道我可以实现这样的事情的技术,还是我只需要在需要之前定义它?
    • @Lewis:把下面的代码放在你从上面调用的函数中。
    • 谢谢大家,我会在定时器允许的时候接受这个答案。
    猜你喜欢
    • 2015-06-22
    • 1970-01-01
    • 2015-01-01
    • 2014-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-08
    相关资源
    最近更新 更多