方法调用一个函数

jQuery .on() method calling a function inmediatly

本文关键字:一个 函数 调用 方法      更新时间:2023-09-26

我不是JavaScript专家(远非如此),我只是对jQuery有一些肤浅的经验——没有什么太花哨的。我有以下代码:

    // show search forms
    searchButton = jQuery('#show-search');
    searchForm = jQuery('#search-form');
    function toggleSearch() {
        searchButton.button('toggle');
        searchForm.slideToggle(300, function() {
                searchForm.find('#value').focus();
            });
    }
    searchButton.on('click', toggleSearch());

当页面加载时,#search-form实际上被激活并向下滑动,而不需要调用函数(即实际上单击按钮)。

根据这篇帖子,我可以通过这样的功能:

    searchButton.on('click', toggleSearch);

它也会像我这样做:

    searchButton.on('click', function() {
        toggleSearch();
    });

有效。两种方法都可以。

  • 为什么这个有效,为什么我不能只使用第一种形式?(通过toggleSearch()
  • 如果有一个名为toggleFunction的变量具有某个随机值,该怎么办?它不是被传递而不是函数吗

编辑:我知道这个很好的答案,但它没有解释"参考"部分,也没有解释以前分配的变量的情况。在这些情况下,是否需要命名函数?我应该每次都用吗?

使用toggleSearch()时,实际上是在运行函数,函数的返回用作处理程序。如果省略括号,则传递对函数的引用,并且在事件发生时将调用函数本身。

在两个"工作"的函数的情况下,第一个是我所描述的。在第二个例子中,您将传递一个匿名函数引用作为处理程序。这个匿名函数在调用时运行该方法,而不是在定义时运行,因此其工作方式与只传递函数引用相同。如果您需要向函数传递参数,第二种方法就是这样做的方法。

searchButton.on('click', function() { // this is the handler
    // this is run when the hander executes
    toggleSearch( 'some parameter', 'some other parameter' );
});

()使您执行函数,如果您使用toggleSearch(),则将返回值(※,在您的情况下为undefined)传递给.on,而不是函数本身。

toggleFunction是函数名,也是一个变量,与相同

var toggleFunction = function() {/*...*/};

因此,如果存在另一个名为toggleFunction的变量,则toggleFunction将发生更改。