1
yyfearth 2013-07-22 14:16:48 +08:00
要格式你得用gist
|
3
chchwy 2013-07-22 14:27:55 +08:00
[V2EX技巧] 贴图和贴代码的方法
http://www.v2ex.com/t/74249 |
5
livelazily 2013-07-22 15:46:52 +08:00
breaker 是用来中断循环的,但ECMAScript 5中的forEach是不能中断循环的,这里这么写估计是为了以后方便中断循环而预留的接口
|
6
otakustay 2013-07-22 16:10:51 +08:00 1
ES5的forEach是不能中断的,但_的某些方法依赖这个forEach又要求使用中断这个特性,那怎么办呢?_的办法是,让forEach的iterator返回一个特殊的值,这个值除非是自己内部的函数,其它函数是不可能造得出来的,然后判断是这个值就中断。而创建这么个“特殊的值”的最好的办法就是,随便声明一个对象,因为任意2个对象不会相等,所以在闭包里放一个对象,外部拿不到闭包里的这个对象,就安全了,这个对象就叫breaker
|
7
coolicer OP |
8
coolicer OP @otakustay 我那些注释没错吧,那这样,后面两个else的东西不用执行了?难道还会进if里执行iterator.call(context, obj[i], i, obj) ?
|
9
otakustay 2013-07-22 16:26:49 +08:00
注释没错,如果有原生forEach,确实不会用到_自己实现的,也不会用到breaker,这里存在不一致性
不过_用到breaker的方法是这些:every、all、some、any,这几个的特点是用了breaker提早中断有性能优势,不用也不会影响正确性(性能劣势被原生forEach的速度挽回来了,大概) 于是breaker就这么用着了 |