Javascript 命名以前的匿名函数会中断

Javascript 命名以前的匿名函数会中断,javascript,Javascript,为什么这不起作用: $(document).on('click','a',myFunction); var myFunction = function() { debugger; } 当发生以下情况时: $(document).on('click','a',function() { debugger; } 通过命名所有匿名函数并将它们分解为各自独立的命名函数,我开始了解更多信息。您必须交换行: var myFunction = function() { debugger;

为什么这不起作用:

$(document).on('click','a',myFunction);
var myFunction = function() {
   debugger;
}
当发生以下情况时:

$(document).on('click','a',function() {
   debugger;
}

通过命名所有匿名函数并将它们分解为各自独立的命名函数,我开始了解更多信息。

您必须交换行:

var myFunction = function() {
   debugger;
}
$(document).on('click','a', myFunction);
否则,您将成为事件处理程序,因为当您将变量myFunction传递给.on时,它还没有值

另外:将函数分配给这样的变量并不会使其命名,它仍然是一个匿名函数,只是存储在变量中。命名函数应为:

var myFunction = function someName() {
    debugger;
}

有关更多详细信息,请参阅。

您必须交换行:

var myFunction = function() {
   debugger;
}
$(document).on('click','a', myFunction);
否则,您将成为事件处理程序,因为当您将变量myFunction传递给.on时,它还没有值

另外:将函数分配给这样的变量并不会使其命名,它仍然是一个匿名函数,只是存储在变量中。命名函数应为:

var myFunction = function someName() {
    debugger;
}
请参阅以了解更多详细信息。

而不是说:

var myFunction = function() {
   debugger;
}
你需要说:

function myFunction() {
   debugger;
}
这将在第一次通过时声明函数,以便在程序执行期间可以引用它。

而不是说:

var myFunction = function() {
   debugger;
}
你需要说:

function myFunction() {
   debugger;
}

这将在第一次传递时声明函数,以便在程序执行期间引用它。

噢,这是因为我必须在引用函数之前定义它。它必须按照源代码的顺序在上面。但是没有办法提升函数声明吗?函数声明总是被提升的。但是这里没有声明,它是一个函数表达式。有关详细信息,请参阅我答案底部链接的文章。该页面说明函数声明不能出现在块{…}中。我想这告诉我的是,我不应该在另一个函数中使用函数声明,因此它会将所有函数都放在窗口范围内,这当然是不好的。不,嵌套函数声明是好的和可取的。该引用引用了类似if和for语句的块;我猜FunctionBody就像是一种特殊的块,在那里可以声明。哦,这是因为我必须在引用函数之前定义它。它必须按照源代码的顺序在上面。但是没有办法提升函数声明吗?函数声明总是被提升的。但是这里没有声明,它是一个函数表达式。有关详细信息,请参阅我答案底部链接的文章。该页面说明函数声明不能出现在块{…}中。我想这告诉我的是,我不应该在另一个函数中使用函数声明,因此它会将所有函数都放在窗口范围内,这当然是不好的。不,嵌套函数声明是好的和可取的。该引用引用了类似if和for语句的块;我猜FunctionBody就像是一种特殊的块,在那里可以声明。JavaScript总是让我感到惊讶。这就是我问这些基本问题的原因,因为我总是学到一些我从未预料到的东西。@Benjamin谢谢你的编辑,链接让答案变得更好。哇。JavaScript总是让我感到惊讶。这就是我问这些基本问题的原因,因为我总是学到一些我从未预料到的东西。@Benjamin谢谢你的编辑,链接让答案变得更好。