繁体   English   中英

匿名函数如何在jQuery / Javascript中工作?

[英]How does anonymous functions work in jQuery/Javascript?

匿名函数如何知道传入的参数? 例如,

情况1:

$( "li" ).each(function( index ) {
  console.log( index + ": " + $( this ).text() );
});

案例2:

$( "li" ).each(function(e) {
  e.preventDefault();
});

案例3:

$( "li" ).each(function( index, element ) {
  console.log( index + ": " + element + $( this ).text() );
});

在每种情况下,匿名函数如何知道eindexelement是什么?

因为each代码中的代码都会调用函数,并使用参数传递它。

function notEach(callback) {
    callback(1,2,3);
}

notEach(function (one, two, three) {
    console.log(one, two three);
});

如果我们可以说each都是一个小机器人, each告诉函数它的参数是什么。 它拾取集合和函数,将集合的元素一次放入函数中,并将输出作为集合粘在一起。 http://api.jquery.com/jquery.each/

你应该明白,当你编写一个匿名函数时,它既是一个过程,也是一个对象。 您同时为Javascript定义如何执行该功能(“知道如何”调用它)以及该功能是什么(“知道”它是一个特定的对象)。 某些语言仍在使用,其中函数不是对象。 所以,当你在这里遇到它时,这个事实可能令人困惑。

each功能的天真实现

function $(selector) {

    var elements = document.querySelectorAll(selector);

    return {
        each: function (fn) {
            for (var i = 0; i < elements.length; i++) {
                fn(i, elements[i]);
            }        
        }
    };
}

jQuery函数返回一个包含each函数的对象。 此函数可以访问匹配的元素并对它们进行迭代。 它可以在每次迭代时调用您给它的函数,并将当前索引和相应的元素传递给它。

你的第二个案例对我来说没什么意义。 据我所知jQuery ,没有事件传递给each函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM