我在filter()
中使用了jQuerys for loop
,并且出于性能原因,我想重构我的代码以不使用匿名函数。
我现在有什么:
function filterSegments() {
var myVar = 5;
for (var i=0; i < segments; i++) {
clone.children().filter(function(i) {
return i < myVar;
).remove();
}
}
我想要的是什么:
function filterSegments() {
var myVar = 5;
for (var i=0; i < segments; i++) {
clone.children().filter(myFunc).remove();
}
}
function myFunc(i, elem, myVar) {
return i < myVar;
}
我的问题是,这比一次又一次地使用匿名函数更有效率吗?第二个问题,如何将myFunc()
变量传递给myVar
,而不必将其声明为全局变量
我想同样的概念可能适用于jQuery&#39; each()
答案 0 :(得分:0)
你会获得相同的表现;但如果你真的想要,你可以做其他一些事情。
设置一个closure,其函数返回.filter
可以使用的函数:
function filterSegments() {
var myVar = 5;
for (var i = 0; i < segments; i++) {
clone.children().filter(myFunc(myVar)).remove();
}
function myFunc(max) {
return function(i) { return i < max; };
}
}
如果您想使用.bind
,它将如下所示:
function filterSegments() {
var myVar = 5;
for (var i = 0; i < segments; i++) {
clone.children().filter(myFunc.bind(null, myVar)).remove();
}
function myFunc(max, i) {
return i < max;
}
}
如果您想使用ES6 Arrow Functions:
function filterSegments() {
var myVar = 5;
for (var i = 0; i < segments; i++) {
clone.children().filter(j => j < myVar).remove();
}
}
这是我的最爱,因为它使阅读变得如此简单,非常简洁!
.remove([selector])
种类:
function filterSegments() {
var myVar = 5;
for (var i = 0; i < segments; i++) {
clone.children().remove(':lt(' + myVar + ')');
}
}
甚至更好(所以你不要经历所有孩子)使用.children([selector])
种类:
function filterSegments() {
var myVar = 5;
for (var i = 0; i < segments; i++) {
clone.children(':lt(' + myVar + ')').remove();
}
}