全局变量和addEventlistener

时间:2014-09-28 16:02:22

标签: javascript global-variables 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中。我想没有别的办法吗?

1 个答案:

答案 0 :(得分:3)

您在更改之前使用X的值。以下是代码运行的顺序:

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

  2. 声明一个名为X的变量。 (首先不仅是因为它位于顶部,而且因为创建用var声明的变量是在进入范围后首先完成的事情之一,在处理函数声明后不久。)

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

  4. addEventListener上致电window

  5. X输出到控制台。

  6. (如果deviceorientation触发了window事件,则更新X的值。

  7. 相反,在更改后使用值

    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);
    }