Javascript 为什么<;脚本>;元素影响全局定义的函数?

Javascript 为什么<;脚本>;元素影响全局定义的函数?,javascript,Javascript,我不明白为什么单击按钮时,下面的代码块工作方式不同。它们都包含两个警告不同消息的函数,区别在于在第二个示例中有单独的块 在第一个示例中,这两个按钮也会发出警报Hello,但在第二种情况下,它们会提醒来自每个函数的单个消息 第一个代码: 标题 你好 你好 函数func(){ 警惕(“你好!”); } document.getElementById(“红色”).onclick=func; 函数func(){ 警惕(“你好!!!”); } document.getElementById(“绿色”)

我不明白为什么单击按钮时,下面的代码块工作方式不同。它们都包含两个警告不同消息的函数,区别在于在第二个示例中有单独的

在第一个示例中,这两个按钮也会发出警报
Hello,但在第二种情况下,它们会提醒来自每个函数的单个消息

第一个代码:


标题
你好
你好
函数func(){
警惕(“你好!”);
}
document.getElementById(“红色”).onclick=func;
函数func(){
警惕(“你好!!!”);
}
document.getElementById(“绿色”).onclick=func;

这是因为函数声明被提升到封闭函数的顶部,在本例中是脚本。这允许您在函数声明之前调用函数

func();
函数func(){
log('This works!');

}
区别在于脚本元素的数量不同
-什么?为什么给两个不同的函数赋予相同的名称?这对我来说毫无意义,代码也不清楚……这里隐藏着一个相当不错的问题——也就是为什么独立的
func
s没有像第一个那样凌驾于另一个之上——它们都是在全局范围内声明的。@Dimon你的问题一开始有点不清楚,因此社区投了一些反对票。我已经重新起草了一点-我希望没问题-如果我更改了您的要求,请进一步修改。@GerardoFurtado谢谢-是的,我本来打算这样做的,错过了:)很好的解释,但是按钮点击会在稍后执行,所以引擎没有时间覆盖函数()吗如您在第四段代码中所述的引用?@domenicr事件侦听器稍后将被调用,是的。但是当您使用
.onclick=func
时,将
func
的当前值存储为事件侦听器,它不是活动的。如果您使用
.onclick=function(){func()}
,那么它将是活动的。