1.0版each函数:
1 | function( obj, fn, args ) { |
遍历obj对象,直接用fn.apply调用。
1.2.6版each函数:
1 | function( object, callback, args ) { |
先看下两个版本代码的区别,首先是函数参数名的调整:fn改为callback,最主要是对第三个参数的调用做修改优化,1.0直接 args || [i,obj[i]],而1.2.6
分开判断 ,在没有args的情况下 用call调用。而且把object.length 先保存在length变量中。
从这两段代码中我们也可以学到写javascript的一些技巧,比如args || [i, obj[i]]
这种写法,
args为空直接采用[i,obj[i]]而不用使用if和else来判断。这就像Python工匠里说的在边界处思考
我们再来通过JavaScript 中 apply 、call 的详解来温故下call和apply的区别:
apply 方法传入两个参数:一个是作为函数上下文的对象,另外一个是作为函数参数所组成的数组。
call 方法第一个参数也是作为函数上下文的对象,但是后面传入的是一个参数列表,而不是单个数组。