全局变量和 addEventlistener

Pui*_*ibo 0 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);
Run Code Online (Sandbox Code Playgroud)

编辑:我想做类似的事情

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);
Run Code Online (Sandbox Code Playgroud)

现在我明白我必须将 f(X) 放在函数 handleOrientation 中。我想没有其他办法了吗?

T.J*_*der 6

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

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

  2. 声明一个名为 的变量X。(首先不仅因为它在顶部,而且因为创建声明为 with 的变量var是进入作用域时首先要做的事情之一,在处理函数声明之后不久。)

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

  4. 呼叫addEventListenerwindow

  5. 输出X到控制台。

  6. (如果以及何时deviceorientation触发事件window)更新 的值X

相反,使用更改的值:

var X = 0; 

window.addEventListener("deviceorientation", handleOrientation, true);

function handleOrientation(event) {
    var alpha = Math.round(event.alpha);  
    X = alpha;
    console.log(X);
}
Run Code Online (Sandbox Code Playgroud)

或者:

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);
}
Run Code Online (Sandbox Code Playgroud)