全局变量和addEventlistener



问题是:我想要一个全局变量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的值更改之前,您正在使用它。以下是代码运行的顺序:

  1. 创建一个名为handleOrientation的函数。(为什么要先创建?因为创建函数声明所描述的函数是进入作用域后首先要做的事情之一。)

  2. 声明一个名为X的变量。(首先,不仅因为它位于顶部,还因为创建用var声明的变量是在处理函数声明后不久进入范围时所做的第一件事。)

  3. 0分配给X。(这是运行的第一个分步代码。)

  4. window上呼叫addEventListener

  5. X输出到控制台。

  6. (如果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);
}

相关内容

  • 没有找到相关文章

最新更新