@@ -1181,10 +1181,12 @@ function $RootScopeProvider() {
1181
1181
1182
1182
var self = this ;
1183
1183
return function ( ) {
1184
- var indexOfListener = namedListeners . indexOf ( listener ) ;
1185
- if ( indexOfListener !== - 1 ) {
1186
- namedListeners [ indexOfListener ] = null ;
1184
+ var index = arrayRemove ( namedListeners , listener ) ;
1185
+ if ( index >= 0 ) {
1187
1186
decrementListenerCount ( self , 1 , name ) ;
1187
+ if ( index <= namedListeners . $$listenerIndex ) {
1188
+ namedListeners . $$listenerIndex -- ;
1189
+ }
1188
1190
}
1189
1191
} ;
1190
1192
} ,
@@ -1226,24 +1228,15 @@ function $RootScopeProvider() {
1226
1228
} ,
1227
1229
defaultPrevented : false
1228
1230
} ,
1229
- listenerArgs = concat ( [ event ] , arguments , 1 ) ,
1230
- i , length ;
1231
+ listenerArgs = concat ( [ event ] , arguments , 1 ) ;
1231
1232
1232
1233
do {
1233
1234
namedListeners = scope . $$listeners [ name ] || empty ;
1234
1235
event . currentScope = scope ;
1235
- for ( i = 0 , length = namedListeners . length ; i < length ; i ++ ) {
1236
-
1237
- // if listeners were deregistered, defragment the array
1238
- if ( ! namedListeners [ i ] ) {
1239
- namedListeners . splice ( i , 1 ) ;
1240
- i -- ;
1241
- length -- ;
1242
- continue ;
1243
- }
1236
+ for ( namedListeners . $$listenerIndex = 0 ; namedListeners . $$listenerIndex < namedListeners . length ; namedListeners . $$listenerIndex ++ ) {
1244
1237
try {
1245
1238
//allow all listeners attached to the current scope to run
1246
- namedListeners [ i ] . apply ( null , listenerArgs ) ;
1239
+ namedListeners [ namedListeners . $$listenerIndex ] . apply ( null , listenerArgs ) ;
1247
1240
} catch ( e ) {
1248
1241
$exceptionHandler ( e ) ;
1249
1242
}
@@ -1300,23 +1293,15 @@ function $RootScopeProvider() {
1300
1293
if ( ! target . $$listenerCount [ name ] ) return event ;
1301
1294
1302
1295
var listenerArgs = concat ( [ event ] , arguments , 1 ) ,
1303
- listeners , i , length ;
1296
+ listeners ;
1304
1297
1305
1298
//down while you can, then up and next sibling or up and next sibling until back at root
1306
1299
while ( ( current = next ) ) {
1307
1300
event . currentScope = current ;
1308
1301
listeners = current . $$listeners [ name ] || [ ] ;
1309
- for ( i = 0 , length = listeners . length ; i < length ; i ++ ) {
1310
- // if listeners were deregistered, defragment the array
1311
- if ( ! listeners [ i ] ) {
1312
- listeners . splice ( i , 1 ) ;
1313
- i -- ;
1314
- length -- ;
1315
- continue ;
1316
- }
1317
-
1302
+ for ( listeners . $$listenerIndex = 0 ; listeners . $$listenerIndex < listeners . length ; listeners . $$listenerIndex ++ ) {
1318
1303
try {
1319
- listeners [ i ] . apply ( null , listenerArgs ) ;
1304
+ listeners [ listeners . $$listenerIndex ] . apply ( null , listenerArgs ) ;
1320
1305
} catch ( e ) {
1321
1306
$exceptionHandler ( e ) ;
1322
1307
}
0 commit comments