Javascript 为什么我们不能传递一个命名函数而不是匿名函数?

Javascript 为什么我们不能传递一个命名函数而不是匿名函数?,javascript,Javascript,我已经有了一些javascript方面的经验,但我有一段时间的疑问:为什么不能将命名函数传递到需要匿名函数来执行代码的地方?即: document.getElementById('btn').addEventListener('click', function(){ alert('Hello World'); }); 现在让我们假设我已经有了一个函数来实现这一点 var func = function(){ alert('Hello World'); } 为什么它不作为cli

我已经有了一些javascript方面的经验,但我有一段时间的疑问:为什么不能将命名函数传递到需要匿名函数来执行代码的地方?即:

document.getElementById('btn').addEventListener('click', function(){
    alert('Hello World');
});
现在让我们假设我已经有了一个函数来实现这一点

var func = function(){
    alert('Hello World');
}
为什么它不作为click事件的回调执行

 document.getElementById('btn').addEventListener('click', func);
创建匿名函数然后调用命名函数似乎是多余的:

 document.getElementById('btn').addEventListener('click', function(){
     func();
 });

我必须看一下您的完整代码,但是您可以将函数作为变量传递

document.getElementById('button1').addEventListener('click', function(){
alert('Hello World');
});


var func = function(){
   alert('Hello World, it is me again.');
};

document.getElementById('button2').addEventListener('click', func);
在这里查看小提琴:


您是否可能在代码中的错误位置声明函数(func)的变量,导致其为空?

您可以传递一个命名函数,正如您所描述的那样。您的示例不是命名函数,如果它不起作用,则与您将其放入变量中的事实无关。无论您在这里拥有什么,都应该起作用。我仍然想知道你说的是什么意思,创建一个匿名函数然后调用一个命名函数似乎是多余的:换句话说,没有什么“期望”一个匿名函数;这在JavaScript中没有任何意义。如果某个对象需要一个函数,那么它也需要一个函数,而恰好是匿名的对象和非匿名的对象在上下文中没有区别。请检查控制台是否存在错误Not
null
,但
未定义的