e e t S c o r e ( t w e e t ) { r e t u r n ( t w e e t . f a v o r i t e s _ c o u n t + t w e e t . r e t w e e t s _ c o u n t ) ; } f u n c t i o n c o m p a r e T w e e t s B y S c o r e ( a , b ) { r e t u r n ( t w e e t S c o r e ( b ) - t w e e t S c o r e ( a ) ) ; } f u n c t i o n r e n d e r A p p l i c a t i o n ( t w e e t s ) { r e t u r n ( d o c u m e n t . d o m . u l ( { c l a s s : ' t w e e t s ' } , t w e e t s . s o r t ( c o m p a r e T w e e t s B y S c o r e ) . s l i c e ( 0 , 5 ) . m a p ( f u n c t i o n ( t w e e t ) { r e t u r n ( d o c u m e n t . d o m . l i ( { c l a s s : ' t w e e t ' } , t w e e t . t e x t ) ; } ) ) ) ; } v a r t w e e t s = f e t c h T w e e t s ( { u s e r n a m e : ' m p e r e i r a ' } , { l i m i t : 2 0 } ) ; d o c u m e n t . d o m . r e n d e r ( r e n d e r A p p l i c a t i o n ( t w e e t s ) , d o c u m e n t . b o d y ) ;
e e t S c o r e ( t w e e t ) { r e t u r n ( t w e e t . f a v o r i t e s _ c o u n t + t w e e t . r e t w e e t s _ c o u n t ) ; } f u n c t i o n c o m p a r e T w e e t s B y S c o r e ( a , b ) { r e t u r n ( t w e e t S c o r e ( b ) - t w e e t S c o r e ( a ) ) ; } f u n c t i o n r e n d e r A p p l i c a t i o n ( t w e e t s ) { r e t u r n ( d o c u m e n t . d o m . u l ( { c l a s s : ' t w e e t s ' } , t w e e t s . s o r t ( c o m p a r e T w e e t s B y S c o r e ) . s l i c e ( 0 , 5 ) . m a p ( f u n c t i o n ( t w e e t ) { r e t u r n ( d o c u m e n t . d o m . l i ( { c l a s s : ' t w e e t ' } , t w e e t . t e x t ) ; } ) ) ) ; } v a r t w e e t s = f e t c h T w e e t s ( { u s e r n a m e : ' m p e r e i r a ' } , { l i m i t : 2 0 } ) ; d o c u m e n t . d o m . r e n d e r ( r e n d e r A p p l i c a t i o n ( t w e e t s ) , d o c u m e n t . b o d y ) ;
e e t S c o r e ( t w e e t ) { r e t u r n ( t w e e t . f a v o r i t e s _ c o u n t + t w e e t . r e t w e e t s _ c o u n t ) ; } f u n c t i o n c o m p a r e T w e e t s B y S c o r e ( a , b ) { r e t u r n ( t w e e t S c o r e ( b ) - t w e e t S c o r e ( a ) ) ; } f u n c t i o n r e n d e r A p p l i c a t i o n ( t w e e t s ) { r e t u r n ( R e a c t . D O M . u l ( { c l a s s N a m e : ' t w e e t s ' } , t w e e t s . s o r t ( c o m p a r e T w e e t s B y S c o r e ) . s l i c e ( 0 , 5 ) . m a p ( f u n c t i o n ( t w e e t ) { r e t u r n ( R e a c t . D O M . l i ( { c l a s s N a m e : ' t w e e t ' } , t w e e t . t e x t ) ; } ) ) ) ; } v a r t w e e t s = f e t c h T w e e t s ( { u s e r n a m e : ' m p e r e i r a ' } , { l i m i t : 2 0 } ) ; R e a c t . r e n d e r C o m p o n e n t ( r e n d e r A p p l i c a t i o n ( t w e e t s ) , d o c u m e n t . b o d y ) ;
trigger viewport reflows, relayouts, repaints (CSS engine, etc.) Can also invalidate caches, requiring the entire DOM to be reconstructed on the viewport
You can't explain that! #tides Just had #breakfast. @troll yes, definitely plan on that. pic.twitter.com/asd23 #selfie #instagram Good# morning. Header Profile Tweets Top Tweets
= R e a c t . c r e a t e C l a s s ( { r e n d e r : f u n c t i o n ( ) { r e t u r n ( R e a c t . D O M . d i v ( n u l l , [ R e a c t . D O M . i m g ( n u l l , t h i s . p r o p s . u s e r . i m a g e ) , R e a c t . D O M . p ( n u l l , t h i s . p r o p s . u s e r . n a m e ) ] ) ; } } ) ; v a r T w e e t s = R e a c t . c r e a t e C l a s s ( { r e n d e r : f u n c t i o n ( ) { r e t u r n ( R e a c t . D O M . u l ( n u l l , t h i s . p r o p s . t w e e t s . m a p ( f u n c t i o n ( t w e e t ) { r e t u r n ( R e a c t . D O M . l i ( n u l l , t w e e t . t e x t ) ) ; } ) ; } } ) ; v a r T o p T w e e t s = R e a c t . c r e a t e C l a s s ( { r e n d e r : f u n c t i o n ( ) { r e t u r n ( R e a c t . D O M . d i v ( n u l l , [ R e a c t . D O M . h 1 ( n u l l , ' T o p T w e e t s ' ) , P r o f i l e ( { u s e r : t h i s . p r o p s . u s e r } ) , T w e e t s ( { t w e e t s : t h i s . p r o p s . u s e r . t w e e t s } ) ] ) ; } } ) ; R e a c t . r e n d e r C o m p o n e n t ( T o p T w e e t s ( { u s e r : u s e r } ) , d o c u m e n t . b o d y ) ;
= R e a c t . c r e a t e C l a s s ( { r e n d e r : f u n c t i o n ( ) { r e t u r n ( < d i v > < i m g h r e f = { t h i s . p r o p s . u s e r . i m a g e } / > < p > { t h i s . p r o p s . u s e r . n a m e } < / p > < / d i v > ) ; } } ) ; v a r T w e e t s = R e a c t . c r e a t e C l a s s ( { r e n d e r : f u n c t i o n ( ) { r e t u r n ( < u l > { t h i s . p r o p s . t w e e t s . m a p ( f u n c t i o n ( t w e e t ) { r e t u r n ( < l i > t w e e t . t e x t < / l i > ) ; } ) } ; < / u l > ) ; } } ) ; v a r T o p T w e e t s = R e a c t . c r e a t e C l a s s ( { r e n d e r : f u n c t i o n ( ) { r e t u r n ( < d i v > < h 1 > T o p T w e e t s < / h 1 > < P r o f i l e u s e r = { t h i s . p r o p s . u s e r } / > < T w e e t s t w e e t s = { t h i s . p r o p s . u s e r . t w e e t s } / > < / d i v > ) ; }
inconsistent equality operators Confusing, inconsistent automatic operator conversions Lack of block scope Non-uniform iterators Global variables by default NaN this No macros (yet...) etc.
significant improvements Popular ones CoffeeScript: mostly syntax sugar TypeScript: typed superset of JavaScript. Brings type checking, compile time errors
e t [ t w e e t s ( < ? ( g e t - t w e e t s - f o r " s w a n n o d e t t e " ) ) f i r s t - u r l ( < ? ( e x p a n d - u r l ( f i r s t ( p a r s e - u r l s t w e e t s ) ) ) ) r e s p o n s e ( < ? ( h t t p - g e t f i r s t - u r l ) ) ] ( . j s / c o n s o l e ( l o g " M o s t r e c e n t l i n k t e x t : " r e s p o n s e ) ) ) ( c a t c h j s / E r r o r e ( . j s / c o n s o l e ( e r r o r " E r r o r w i t h t h e t w i t t e r v e r s e : " e ) ) ) ) ) Asynchronous Error Handling
Ditch stateful objects, ditch events. Be declarative. Immutability. That's it. 5:39 AM - 15 Dec 2013 David Nolen @swannodette Follow 41 RETWEETS 39 FAVORITES
Frameworks Clojure Rationale Why Clojure? Beating the Averages How ClojureScript 101 Translations from JavaScript Light Table ClojureScript Tutorial Om Tutorial