Javascript 关于jQuery中匿名函数的问题

Javascript 关于jQuery中匿名函数的问题,javascript,jquery,functional-programming,anonymous-function,Javascript,Jquery,Functional Programming,Anonymous Function,我不熟悉jquery,在上面的语句中,对于每个'li'元素,都会在内存中创建一个匿名函数的新副本,或者对所有元素使用一个副本。我相信每个条目都会使用和调用相同的函数。它只是创建了一个匿名函数,但是调用了几次。将函数想象成传递给另一个函数的变量: 因此,我们的函数每个可能都有以下定义: $('li').each(function(index) { alert(index + ': ' + $(this).text()); }); 所以,它只有一个函数,调用了很多次 注意:这不是它实际实现

我不熟悉jquery,在上面的语句中,对于每个'li'元素,都会在内存中创建一个匿名函数的新副本,或者对所有元素使用一个副本。

我相信每个条目都会使用和调用相同的函数。

它只是创建了一个匿名函数,但是调用了几次。

将函数想象成传递给另一个函数的变量:

因此,我们的函数
每个
可能都有以下定义:

$('li').each(function(index) {
    alert(index + ': ' + $(this).text());
});
所以,它只有一个函数,调用了很多次

注意:这不是它实际实现的方式

这是一个jQuery版本的实现。我添加了注释来表示集合上的迭代:

function Each(somefunc)
{
    for (var item in $(this)) /*the jQuery collection*/){
        someFunc();
    }
}
each:函数(对象、回调、参数){
变量名,i=0,length=object.length;
如果(args){
如果(长度===未定义){

for(对象中的名称)//只有一次。JavaScript总是使用引用。你的问题是关于JavaScript和函数式编程的,而不是关于jQuery,它只是一个框架/库:)

谢谢你的回答。我想在这些情况下使用命名函数。@Mark:没有区别。它应该也是由
each()保存的引用
jquery函数参数。同时将
item
传递到
someFunc
@zerkms:是的,我只是想保留一些用于演示目的。后来添加了1.3.2中的实际实现(这是我最接近的实现!)
each: function( object, callback, args ) {
    var name, i = 0, length = object.length;

    if ( args ) {
        if ( length === undefined ) {
            for ( name in object ) //<--note the iteration over the collection
                if ( callback.apply( object[ name ], args ) === false )
                    break;
        } else
            for ( ; i < length; ) //<--note the iteration over the collection
                if ( callback.apply( object[ i++ ], args ) === false )
                    break;

    // A special, fast, case for the most common use of each
    } else {
        if ( length === undefined ) {
            for ( name in object )  //<--note the iteration over the collection, etc, etc
                if ( callback.call( object[ name ], name, object[ name ] ) === false )
                    break;
        } else
            for ( var value = object[0];
                i < length && callback.call( value, i, value ) !== false; value = object[++i] ){}
    }

    return object;