@@ -15,22 +15,14 @@ export default function createStore(state) {
1515 state = state || { } ;
1616
1717 function unsubscribe ( listener ) {
18- let out = [ ] ;
19- for ( let i = 0 ; i < listeners . length ; i ++ ) {
20- if ( listeners [ i ] === listener ) {
21- listener = null ;
22- }
23- else {
24- out . push ( listeners [ i ] ) ;
25- }
26- }
27- listeners = out ;
18+ let i = listeners . indexOf ( listener ) ;
19+ if ( i > - 1 ) listeners . splice ( i , 1 ) ;
2820 }
2921
3022 function setState ( update , overwrite , action ) {
31- state = overwrite ? update : assign ( assign ( { } , state ) , update ) ;
32- let currentListeners = listeners ;
33- for ( let i = 0 ; i < currentListeners . length ; i ++ ) currentListeners [ i ] ( state , action ) ;
23+ state = overwrite ? update : assign ( { } , state , update ) ;
24+ let i = listeners . length ;
25+ while ( i -- > 0 ) listeners [ i ] ( state , action ) ;
3426 }
3527
3628 /** An observable state container, returned from {@link createStore}
@@ -52,8 +44,10 @@ export default function createStore(state) {
5244
5345 // Note: perf tests verifying this implementation: https://esbench.com/bench/5a295e6299634800a0349500
5446 return function ( ) {
55- let args = [ state ] ;
56- for ( let i = 0 ; i < arguments . length ; i ++ ) args . push ( arguments [ i ] ) ;
47+ let args = [ ] ;
48+ let i = arguments . length ;
49+ while ( i -- > 0 ) args . shift ( arguments [ i ] ) ;
50+ args . shift ( state ) ;
5751 let ret = action . apply ( this , args ) ;
5852 if ( ret != null ) {
5953 if ( ret . then ) ret . then ( apply ) ;
0 commit comments