Javascript JS:为什么变量放置会破坏我的代码?

Javascript JS:为什么变量放置会破坏我的代码?,javascript,Javascript,我正在尝试一个系统,当你点击一个按钮时,它会变成一个活动状态。然后,当您单击屏幕上的其他按钮时,如果您的“活动”,则会发生另一个事件,而不是常规事件 我让它工作了,但我对一些事情感到困惑。这是工作代码: dom.el("skill").onclick = active; function active(){ active = true; } var active = false; 将全局变量active放在列表的底部修复了这个问题,但我最初将它放在最上面,这不起作用 var a

我正在尝试一个系统,当你点击一个按钮时,它会变成一个活动状态。然后,当您单击屏幕上的其他按钮时,如果您的“活动”,则会发生另一个事件,而不是常规事件

我让它工作了,但我对一些事情感到困惑。这是工作代码:

dom.el("skill").onclick = active;

 function active(){
    active = true;
 }

var active = false;
将全局变量
active
放在列表的底部修复了这个问题,但我最初将它放在最上面,这不起作用

var active = false;

dom.el("skill").onclick = active;

 function active(){
    active = true;
 }
为什么这个不行?对我来说,它们几乎是一样的,只是顺序不同而已

var active = false; dom.el("skill").onclick = function (){ active = true; }

这就是你应该怎么做。对函数和布尔值使用相同的变量在某些情况下可能会起作用,但这不是一种好的样式。不要这样做。

看看术语“提升”。这是因为您的功能声明已被提升,因此将其移到顶部。初始化不会被挂起,因此
var active=false
会停留在您放置它的位置

在第一种情况下,首先进行函数声明,然后将函数设置为onclick处理程序

在第二种情况下,将处理程序设置为
false


为变量和函数使用不同的名称可能是个好主意。

变量不能同时包含函数和布尔值。几乎可以肯定,因为变量和函数具有相同的名称;一次将false赋值给onclick,另一次赋值给函数。为什么不选择不同的名称呢?“对函数和布尔值使用相同的变量在某些情况下可能会起作用”:仅在Ruby中。