【问题标题】:Self Executing Anonymous Functions within JavascriptJavascript 中的自执行匿名函数
【发布时间】:2014-09-27 06:21:41
【问题描述】:

我一直在尝试理解匿名函数。我开始意识到在末尾添加额外的括号有助于匿名函数的执行。但是,我也遇到过似乎在没有额外括号的情况下执行匿名函数的代码,令我惊讶的是,我也找不到 jquery 就绪方法的用法。它类似于:-

$(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');
        }
    });

})();

【问题讨论】:

  • 此问题中的代码与 jQuery Validate 插件没有任何关系,问题与表单验证无关。删除了jquery-validate 标签。谢谢。
  • 好的,谢谢。仍在学习和习惯这个网站。

标签: javascript jquery anonymous-function document-ready


【解决方案1】:

$ 是 jQuery 中的一个函数。所以,$() 是一个函数调用。并且:

$(function() { /* code here */});

是您将匿名函数传递给的函数调用。然后,$ 函数将在未来某个时间调用该匿名函数。在 jQuery 的情况下,当 DOM 完成加载并准备好进行操作时,它将调用该函数。这是一种我不使用的快捷语法,主要是因为它使不熟悉 jQuery 的人感到困惑,但其他人喜欢它是因为它简洁。这是它的简写:

$(document).ready(function() { /* code here */});

我个人觉得这更具自我描述性。

这些不是自动执行的匿名函数。这些是用于不同目的的不同结构。这只是一个普通的函数调用,就像 ready() 一样,只是添加了一个函数。

您的第二个构造不需要额外的括号,并且在这种特殊情况下不要添加任何内容。

【讨论】:

  • 哇。谢谢你。
  • @Grateful - 在这个特定实例中那些额外的括号不会添加任何东西,也没有用或不需要。在其他情况下它们是有意义的,但在这种情况下不是,因为函数已经被执行了。
【解决方案2】:

您只是在调用具有特定名称的函数。该函数的名称是$。如果您将在调试器中执行$() 的操作,您将看到它将执行它。你可以给这个函数传递一个参数。

在您的情况下,您的参数是一个函数。但你可以这样做:$(console.log(1))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-28
    • 1970-01-01
    • 1970-01-01
    • 2011-03-24
    相关资源
    最近更新 更多