我一直在努力了解匿名功能。我已经意识到在最后添加额外的括号有助于匿名函数执行。但是,我也遇到了似乎在没有额外括号的情况下执行匿名函数的代码,令我惊讶的是我也找不到使用jquery ready方法。它类似于: -
$(function() {
$('#login_form #username').validator({
format: 'alphanumeric',
invalidEmpty: true,
correct: function() {
$('#login_form #username').text('Thanks');
},
error: function() {
$('#login_form #username').text('Plese fill username field');
}
});
});
上述文件只包含在包含表单的html文件中。我似乎无法理解上面的代码是如何自动执行的。有人可以帮助解释一下吗?此外,额外括号会有什么不同,例如: -
$(function() {
$('#login_form #username').validator({
format: 'alphanumeric',
invalidEmpty: true,
correct: function() {
$('#login_form #username').text('Thanks');
},
error: function() {
$('#login_form #username').text('Plese fill username field');
}
});
})();
答案 0 :(得分:2)
$
是jQuery中的一个函数。所以,$()
是一个函数调用。和
$(function() { /* code here */});
是一个函数调用,您将匿名函数传递给。那个$
函数将在将来的某个时间调用该匿名函数。在jQuery的情况下,当DOM完成加载并准备好进行操作时,它将调用该函数。这是一种我不主要使用的快捷语法,因为它让那些不熟悉jQuery的人感到困惑,但其他人喜欢它简洁。这是简写:
$(document).ready(function() { /* code here */});
我个人觉得这更具自我描述性。
这些不是自动执行的匿名函数。这些是用于不同目的的不同结构。这只是一个简单的函数调用,就像ready()
一样,只需添加一个函数即可。
不需要你的第二个结构的额外的parens,并且在这种特殊情况下不添加任何东西。
答案 1 :(得分:0)
您只是调用具有特定名称的函数。函数的名称是$
。如果您在调试器中执行某些操作$()
,您将看到它将执行它。您可以将参数传递给此函数。
在您的情况下,您的参数是一个函数。但你可以这样做:$(console.log(1))