问题是:我想要一个全局变量X,它取alpha的值。对于下面的代码,控制台中X的值始终为零。
var X = 0;
window.addEventListener("deviceorientation", handleOrientation, true);
function handleOrientation(event) {
var alpha = Math.round(event.alpha);
X = alpha;
}
console.log(X);
编辑:我想做一些类似的事情
var X = 0;
window.addEventListener("deviceorientation", handleOrientation, true);
function handleOrientation(event) {
var alpha = Math.round(event.alpha);
X = alpha;
}
function f(x){ return x*x }
f(X);
现在我明白了,我必须把f(X)放在函数handleOrientation中。我想没有别的办法了吧?
在X
的值更改之前,您正在使用它。以下是代码运行的顺序:
-
创建一个名为
handleOrientation
的函数。(为什么要先创建?因为创建函数声明所描述的函数是进入作用域后首先要做的事情之一。) -
声明一个名为
X
的变量。(首先,不仅因为它位于顶部,还因为创建用var
声明的变量是在处理函数声明后不久进入范围时所做的第一件事。) -
将
0
分配给X
。(这是运行的第一个分步代码。) -
在
window
上呼叫addEventListener
。 -
将
X
输出到控制台。 -
(如果
window
上触发了deviceorientation
事件,以及何时触发)更新X
的值。
相反,在更改后使用值:
var X = 0;
window.addEventListener("deviceorientation", handleOrientation, true);
function handleOrientation(event) {
var alpha = Math.round(event.alpha);
X = alpha;
console.log(X);
}
或者:
var X = 0;
window.addEventListener("deviceorientation", handleOrientation, true);
function handleOrientation(event) {
var alpha = Math.round(event.alpha);
X = alpha;
doSomethingWithX();
}
function doSomethingWithX() {
console.log(X);
}