2014-09-28 112 views
-1

这里是问题:我想要有全局变量X,它取值为alpha。使用下面的代码,控制台中X的值始终为零。全局变量和addEventlistener

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

现在我明白了,我不得不把功能handleOrientation内F(X)。我猜这是没有其他办法的?

+1

没有什么明显的错误与您的代码,但是你没有打印任何东西出来的时候事件发生或事件发生后的任何时间。在事件发生后,你如何验证“X”仍然是“0”? – apsillers 2014-09-28 16:06:39

回答

3

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

  1. 创建一个名为handleOrientation的函数。 (为什么第一?因为创建由功能声明是在进入一个范围内所做的最重要的东西之一。中描述的功能)

  2. 声明一个名为X变量。 (第一不仅是因为它在顶部,但因为建立与var声明的变量是在进入一个范围内所做的最重要的东西之一,不久后处理功能的声明。)

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

  4. 拨打致电addEventListener

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

或者:

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

谢谢你的回答。 我明白你在说什么,但是当我创建另一个函数时,让我们说函数f(a){..}将X作为参数我总是有f(0),因为函数handleOrientation之外的X = 0。 – Puibo 2014-09-28 16:07:12

+0

@Puibo:恐怕不清楚。如果你举例说明你想做什么,我可以告诉你如何去做。如果你想在其他功能中使用'X',你可以;他们会在运行时看到它的价值。如果他们在事件处理程序触发之前运行,他们会看到'0';如果它们在触发后运行,则会看到事件处理程序分配的值。问题在于时机。 – 2014-09-28 16:07:56

+0

好的,这完全解决了我的问题。我只有一个问题。没有办法把f(X)放在handleOrientation函数之外(看看我编辑的文章)? – Puibo 2014-09-28 16:27:16