callback.apply(obj[i], args)这样写有问题
如果这样写,在回调函数中,只有通过this去取值了,。应该写成callback.apply(obj[i], i, obj[i], args)
如果这样写,在回调函数中,只有通过this去取值了,。应该写成callback.apply(obj[i], i, obj[i], args)
2016-08-12
each: function(obj, callback, args) {
var value,
i = 0,
length = obj.length,
isArray = isArraylike(obj); // 判断是不是数组
// 传了第三个参数
if (args) {
if (isArray) {
for (; i < length; i++) {
// 相当于:
// args = [arg1, arg2, arg3];
// callback(args1, args2, args3)。然后callback里边的this指向了obj[i]
value = callback.apply(obj[i], args);
if (value === false) {
// 注意到,当callback函数返回值会false的时候,注意是全等!循环结束
break;
}
}
// 非数组
} else {
for (i in obj) {
value = callback.apply(obj[i], args);
if (value === false) {
break;
}
}
}
// A special, fast, case for the most common use of each
} else {
// 数组
// 其实这里代码有点赘余,如果考虑代码的简洁性牺牲一点点性能
// 在处理数组的情况下,也是可以用 for(i in obj)的
if (isArray) {
for (; i < length; i++) {
// 相当于callback(i, obj[i])。然后callback里边的this指向了obj[i]
value = callback.call(obj[i], i, obj[i]);
if (value === false) {
break;
}
}
// 非数组
} else {
for (i in obj) {
value = callback.call(obj[i], i, obj[i]);
if (value === false) {
break;
}
}
}
}
return obj;
},| each: function(obj, callback, args) { | |
| var value, | |
| i = 0, | |
| length = obj.length, | |
| isArray = isArraylike(obj); // 判断是不是数组 | |
| // 传了第三个参数 | |
| if (args) { | |
| if (isArray) { | |
| for (; i < length; i++) { | |
| // 相当于: | |
| // args = [arg1, arg2, arg3]; | |
| // callback(args1, args2, args3)。然后callback里边的this指向了obj[i] | |
| value = callback.apply(obj[i], args); | |
| if (value === false) { | |
| // 注意到,当callback函数返回值会false的时候,注意是全等!循环结束 | |
| break; | |
| } | |
| } | |
| // 非数组 | |
| } else { | |
| for (i in obj) { | |
| value = callback.apply(obj[i], args); | |
| if (value === false) { | |
| break; | |
| } | |
| } | |
| } | |
| // A special, fast, case for the most common use of each | |
| } else { | |
| // 数组 | |
| // 其实这里代码有点赘余,如果考虑代码的简洁性牺牲一点点性能 | |
| // 在处理数组的情况下,也是可以用 for(i in obj)的 | |
| if (isArray) { | |
| for (; i < length; i++) { | |
| // 相当于callback(i, obj[i])。然后callback里边的this指向了obj[i] | |
| value = callback.call(obj[i], i, obj[i]); | |
| if (value === false) { | |
| break; | |
| } | |
| } | |
| // 非数组 | |
| } else { | |
| for (i in obj) { | |
| value = callback.call(obj[i], i, obj[i]); | |
| if (value === false) { | |
| break; | |
| } | |
| } | |
| } | |
| } | |
| return obj; | |
| }, |
源码里面有两个,教程里面是带有第三方参数的
举报