![](/img/trans.png)
[英]how does closure work when declaring anonymous functions in javascript(jquery) calls?
[英]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() );
});
在每种情况下,匿名函数如何知道e
, index
, element
是什么?
因为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.