SlideShare ist ein Scribd-Unternehmen logo
1 von 86
Tricks of the masters
Expert JavaScript:
JavaScript can be strange
JavaScript can be strange
• Syntactically similar to C++ and Java
“Java is to JavaScript as car is to carpet”
• Prototypal inheritance
• Classless. Objects inherit from objects.
• Loosely typed
• Type coercion. “Truthy” / “falsy” values.
• Objects are mutable
NodeLists
NodeLists
Get all the anchors in a page:
var anchors1 = document.getElementsByTagName('a');
[<a href="#">​Item 1​</a>,
<a href="#">​Item 2​</a>]
var anchors2 = document.querySelectorAll('a');
[<a href="#">​Item 1​</a>,
<a href="#">​Item 2​</a>]
NodeLists
User interaction causes more anchors to be
added to the DOM.
More content
including
anchors returned Pagination request
to server
NodeLists
One of our NodeLists is automatically
updated:
console.log(anchors1);
[<a href="#">​Item 1​</a>,
<a href="#">​Item 2​</a>,
<a href="#">​Item 3​</a>,
<a href="#">​Item 4​</a>]
console.log(anchors2);
[<a href="#">​Item 1​</a>,
<a href="#">​Item 2​</a>]
Scope and Closures
Scope and Closures
JavaScript does not have block scope.
Sort of.
Scope and Closures
Variables are scoped to functions
var foo = "bar"; //global
function widget() {
var foo = "123"; //scoped to widget
}
Scope and Closures
Variables are scoped to functions
var message = 'Hello? Is anybody there?';
function helloWorld() {
var message = 'Hello, world!';
return message;
} // returns "Hello, world!"
Scope and Closures
Functions don't need to be named.
A common scoping technique is to use the
Immediately-Invoked Function Expression
(aka IIFE)
Scope and Closures
Immediately-Invoked Function Expression:
(function () {
var message = 'Hello, world!',
conferenceName = 'Dr. Dobbs India',
attendees = 'Awesome';
}());
Scope and Closures
Immediately-Invoked Function Expression:
(function ($) {
$('p'); //works
}(jQuery));
$('p'); //does not work
Scope and Closures
Functions also create closures.
Closure = Anything declared within a function
is aware of anything else declared within that
function.
Scope and Closures
Functions also create closures.
var public = 'Everybody sees this.';
function family() {
var father, mother;
function kids() {
var child1, child2;
}
}
Scope and Closures
Building a game leveraging closures:
var game = (function () {
var secret = 5;
return function (num) {
var total = secret * num;
console.log('You say ' + num + ', I say ' +
total + '. What is my secret?');
};
}());
Scope and Closures
Building a game leveraging closures:
> game(5)
You say 5, I say 25. What is my secret?
> game(10)
You say 10, I say 50. What is my secret?
> secret
ReferenceError: secret is not defined
Scope and Closures
Block scope with let*
if (x) {
let myVar;
let yourVar = 123;
}
* Not yet available everywhere.
Scope and Closures
Block scope with let*
var myVar = 5;
let(myVar = 6) {
alert(myVar); // 6
}
alert(myVar); // 5
* Not yet available everywhere.
Memoization
Memoization
square()
Memoization
var square = function (num) {
return num * num;
};
Memoization
Problem:
What if the operation is more complex and is
called multiple times?
Memoization
Trick:
Cache the result.
Memoization
var square = (function () {
var memo = [];
return function (num) {
var sqr = memo[num];
if (typeof sqr === 'undefined') {
console.log('Calculating...');
memo[num] = sqr = num * num;
}
return sqr;
}
}());
Memoization
var fetchData = (function () {
var data = null, timestamp = new Date().getTime();
return function (url, callback) {
if (timestamp - new Date().getTime() > 60000) {
$.ajax(url, {success: function (d) {
timestamp = new Date().getTime();
data = d;
callback(data);
});
} else {
callback(data);
}
}
}());
Function Overloading
Function overloading
calculateAverage()
Function overloading
> calculateAverage([10, 20, 30, 40, 50])
30
Function overloading
function calculateAverage(values) {
var total = 0;
values.forEach(function (val) {
total += val;
});
return total / values.length;
}
Function overloading
> calculateAverage(10, 20, 30, 40, 50)
30
Function overloading
How many arguments are being passed?
Function overloading
Use the arguments object.
function returnArgs() {
return arguments;
}
> returnArgs('hello', 'world');
["hello", "world"]
Function overloading
arguments is not an Array.
Does not have any Array properties except
length. Not very useful.
Function overloading
arguments can be converted into an array:
var args = Array.prototype.slice.call(arguments);
Function overloading
function calculateAverage(values) {
var total = 0;
if (!Array.isArray(values)) {
values = Array.prototype.slice.call(arguments);
}
values.forEach(function (val) {
total += val;
});
return total / values.length;
}
Function overloading
> calculateAverage('10, 20, 30, 40, 50')
30
Function overloading
function calculateAverage(values) {
var total = 0;
if (typeof values === 'string') {
values = values.split(',');
} else if (typeof values === 'number') {
values = Array.prototype.slice.call(arguments);
}
values.forEach(function (val) {
total += parseInt(val, 10);
});
return total / values.length;
}
Async Code Execution
Async Code Execution
What does this code do?
// Load appointments for April
$.ajax('/calendar/2014/04/');
// Show the calendar
showCalendar();
Shows an empty calendar.
Async Code Execution
Ajax requests are asynchronous.
The JavaScript engine doesn’t wait.
// Load appointments for April
$.ajax('/calendar/2014/04/');
// Show the calendar
showCalendar();
Async Code Execution
Event-driven programming where callback
functions are assigned as event handlers.
When X happens, do Y. Where X is the event
and Y is the code to execute.
Async Code Execution
Assigning an Ajax event handler:
// Load appointments for April
$.ajax('/calendar/2014/04/', {
complete: showCalendar
});
Async Code Execution
Event handler assignment:
document.onclick = function (e) {
e = e || event;
console.log('Mouse coords: ', e.pageX, ' / ', e.pageY);
}
Async Code Execution
Event handler assignment:
document.addEventListener('click', function (e) {
e = e || event;
console.log('Mouse coords: ', e.pageX, ' / ', e.pageY);
});
document.addEventListener('click', function (e) {
e = e || event;
var target = e.target || e.srcElement;
console.log('Click target: ', target);
});
Async Code Execution
Event handler assignment:
var xhr = new XMLHttpRequest();
xhr.onload = function () {
console.log(this.responseText);
}
xhr.open('get', ’/weather_data');
xhr.send();
Async Code Execution
Event handler context:
document.onclick = function (e) {
// `this` refers to document object
e = e || event;
console.log('Mouse coords: ', e.pageX, ' / ', e.pageY);
}
Async Code Execution
Event handler context:
xhr.onload = function () {
// `this` refers to xhr object
console.log(this.responseText);
}
Async Code Execution
this refers to XMLHttpRequest object:
Execution Context
Execution Context
Need to execute callback in different contexts
where this doesn’t refer to the same thing.
Execution Context
Use apply, call or bind to change
execution context.
Execution Context
Usage:
doSomething.apply(context, args);
doSomething.call(context, arg1, arg2, ... argN);
var doIt = doSomething.bind(context, arg1, arg2, … argN);
Execution Context
Let’s bootstrap our earlier Ajax example to
demonstrate.
Execution Context
Ajax event handler assignment from earlier:
var xhr = new XMLHttpRequest();
xhr.onload = function () {
console.log(this.responseText);
}
xhr.open('get', '/weather_data');
xhr.send();
Execution Context
Bootstrap data rendered into the page:
<script>
var bootstrapData = {
"responseText": {
"weather": {
"high": "35 ºC",
"low": "24 ºC",
"precipitation": "0%",
"humidity": "78%",
"wind": "13 km/h"
}
}
};
</script>
Execution Context
Start with refactoring our callback:
function parseData () {
console.log(this.responseText);
}
var xhr = new XMLHttpRequest();
xhr.onload = parseData;
xhr.open('get', '/weather_data');
xhr.send();
Execution Context
Set Ajax code to poll every 15 seconds:
function parseData () {console.log(this.responseText);}
var xhr = new XMLHttpRequest();
xhr.onload = parseData;
setInterval(function () {
xhr.open('get', '/weather_data');
xhr.send();
}, 15000);
Execution Context
bootstrapData is a global variable:
<script>
var bootstrapData = {
"responseText": {
"weather": {
"high": "35 ºC",
"low": "24 ºC",
"precipitation": "0%",
"humidity": "78%",
"wind": "13 km/h"
}
}
};
</script>
Execution Context
Parse bootstrap data immediately on page
load:
function parseData () {
console.log(this.responseText);
}
parseData.call(bootstrapData);
Prototypal Inheritance
Prototypal Inheritance
“All objects in JavaScript are descended from
Object”
var myObject = new Object(); Object
myObject
Prototypal Inheritance
“All objects in JavaScript are descended from
Object”
Object.prototype.hello = 'world';
var myObject = new Object();
Object
.hello
myObject
.hello
Prototypal Inheritance
In JavaScript, functions can act like objects.
Prototypal Inheritance
They have a prototype property allowing
inheritance.
function Person() {};
Person.prototype.name = "Bob";
Prototypal Inheritance
You can create an instance of one using the
new keyword:
var person1 = new Person();
console.log(person1.name); // Bob
Prototypal Inheritance
Live link with its parent:
function Animal() {}
var dog = new Animal();
Animal.prototype.speak = function (msg) {
console.log(msg)
};
Prototypal Inheritance
Live link with its parent:
function Animal() {}
var dog = new Animal();
Animal.prototype.speak = function (msg) {
console.log(msg)
};
dog.speak('woof');
requestAnimationFrame, CSS transforms
Optimization
Optimization
Improving event handlers with delegation
Optimization
Rather than assigning individual handlers:
var a = document.getElementById('save');
a.onclick = function () {
// save code
};
Optimization
Assign one for all of the same type:
document.onclick = function (e) {
e = e || event;
var target = e.target || e.srcElement;
if (target.id === 'save') {
// save code
}
};
Optimization
Improving animation
Optimization
Improving animation
setInterval(function () {
someElement.style.left = (leftValue + 1) + "px";
}, 0);
Optimization
Improve animation with
requestAnimationFrame
Key differences:
•Animation stops when running in hidden tab
•Browser optimized repaint/reflow
Optimization
Animation stops when running in hidden tab
•Uses less GPU/CPU
•Uses less memory
Translation = longer battery life
Optimization
Browser optimized repaint/reflow
Changes to CSS and the DOM cause parts or
all of the document to be recalculated.
Optimization
Source: https://developer.mozilla.org/en/docs/Web/API/window.requestAnimationFrame
requestAnimationFrame compatibility
Optimization
Source: https://developer.mozilla.org/en/docs/Web/API/window.requestAnimationFrame
requestAnimationFrame compatibility
Security
Security
Avoid eval
Security
Use literals
[] instead of new Array()
{} instead of new Object()
Security
Use literals
Array = function () {
// I am pretending to be an array.
// I am doing something evil with your data.
}
Security
External scripts make your application
insecure.
Thank you!
Happy to answer your questions throughout
the conference and afterwards!
ara.pehlivanian@gmail.com
twitter.com/ara_p

Weitere ähnliche Inhalte

Was ist angesagt?

rx.js make async programming simpler
rx.js make async programming simplerrx.js make async programming simpler
rx.js make async programming simplerAlexander Mostovenko
 
Async Redux Actions With RxJS - React Rally 2016
Async Redux Actions With RxJS - React Rally 2016Async Redux Actions With RxJS - React Rally 2016
Async Redux Actions With RxJS - React Rally 2016Ben Lesh
 
Understanding reactive programming with microsoft reactive extensions
Understanding reactive programming  with microsoft reactive extensionsUnderstanding reactive programming  with microsoft reactive extensions
Understanding reactive programming with microsoft reactive extensionsOleksandr Zhevzhyk
 
Asynchronní programování
Asynchronní programováníAsynchronní programování
Asynchronní programováníPeckaDesign.cz
 
Cascadia.js: Don't Cross the Streams
Cascadia.js: Don't Cross the StreamsCascadia.js: Don't Cross the Streams
Cascadia.js: Don't Cross the Streamsmattpodwysocki
 
Introduction to reactive programming & ReactiveCocoa
Introduction to reactive programming & ReactiveCocoaIntroduction to reactive programming & ReactiveCocoa
Introduction to reactive programming & ReactiveCocoaFlorent Pillet
 
Why Redux-Observable?
Why Redux-Observable?Why Redux-Observable?
Why Redux-Observable?Anna Su
 
Classic Games Development with Drools
Classic Games Development with DroolsClassic Games Development with Drools
Classic Games Development with DroolsMark Proctor
 
RxJS - 封裝程式的藝術
RxJS - 封裝程式的藝術RxJS - 封裝程式的藝術
RxJS - 封裝程式的藝術名辰 洪
 
Node.js: Continuation-Local-Storage and the Magic of AsyncListener
Node.js: Continuation-Local-Storage and the Magic of AsyncListenerNode.js: Continuation-Local-Storage and the Magic of AsyncListener
Node.js: Continuation-Local-Storage and the Magic of AsyncListenerIslam Sharabash
 
RxJS Evolved
RxJS EvolvedRxJS Evolved
RxJS Evolvedtrxcllnt
 
You will learn RxJS in 2017
You will learn RxJS in 2017You will learn RxJS in 2017
You will learn RxJS in 2017名辰 洪
 
Redux Sagas - React Alicante
Redux Sagas - React AlicanteRedux Sagas - React Alicante
Redux Sagas - React AlicanteIgnacio Martín
 

Was ist angesagt? (20)

Angular2 rxjs
Angular2 rxjsAngular2 rxjs
Angular2 rxjs
 
rx.js make async programming simpler
rx.js make async programming simplerrx.js make async programming simpler
rx.js make async programming simpler
 
Rxjs swetugg
Rxjs swetuggRxjs swetugg
Rxjs swetugg
 
Rxjs kyivjs 2015
Rxjs kyivjs 2015Rxjs kyivjs 2015
Rxjs kyivjs 2015
 
Rxjs vienna
Rxjs viennaRxjs vienna
Rxjs vienna
 
Async Redux Actions With RxJS - React Rally 2016
Async Redux Actions With RxJS - React Rally 2016Async Redux Actions With RxJS - React Rally 2016
Async Redux Actions With RxJS - React Rally 2016
 
Understanding reactive programming with microsoft reactive extensions
Understanding reactive programming  with microsoft reactive extensionsUnderstanding reactive programming  with microsoft reactive extensions
Understanding reactive programming with microsoft reactive extensions
 
Asynchronní programování
Asynchronní programováníAsynchronní programování
Asynchronní programování
 
Cascadia.js: Don't Cross the Streams
Cascadia.js: Don't Cross the StreamsCascadia.js: Don't Cross the Streams
Cascadia.js: Don't Cross the Streams
 
Introduction to reactive programming & ReactiveCocoa
Introduction to reactive programming & ReactiveCocoaIntroduction to reactive programming & ReactiveCocoa
Introduction to reactive programming & ReactiveCocoa
 
bluespec talk
bluespec talkbluespec talk
bluespec talk
 
Why Redux-Observable?
Why Redux-Observable?Why Redux-Observable?
Why Redux-Observable?
 
Firebase ng2 zurich
Firebase ng2 zurichFirebase ng2 zurich
Firebase ng2 zurich
 
Classic Games Development with Drools
Classic Games Development with DroolsClassic Games Development with Drools
Classic Games Development with Drools
 
Typescript barcelona
Typescript barcelonaTypescript barcelona
Typescript barcelona
 
RxJS - 封裝程式的藝術
RxJS - 封裝程式的藝術RxJS - 封裝程式的藝術
RxJS - 封裝程式的藝術
 
Node.js: Continuation-Local-Storage and the Magic of AsyncListener
Node.js: Continuation-Local-Storage and the Magic of AsyncListenerNode.js: Continuation-Local-Storage and the Magic of AsyncListener
Node.js: Continuation-Local-Storage and the Magic of AsyncListener
 
RxJS Evolved
RxJS EvolvedRxJS Evolved
RxJS Evolved
 
You will learn RxJS in 2017
You will learn RxJS in 2017You will learn RxJS in 2017
You will learn RxJS in 2017
 
Redux Sagas - React Alicante
Redux Sagas - React AlicanteRedux Sagas - React Alicante
Redux Sagas - React Alicante
 

Andere mochten auch

Javascript this keyword
Javascript this keywordJavascript this keyword
Javascript this keywordPham Huy Tung
 
JavaScript Execution Context
JavaScript Execution ContextJavaScript Execution Context
JavaScript Execution ContextJuan Medina
 
JavaScript global object, execution contexts & closures
JavaScript global object, execution contexts & closuresJavaScript global object, execution contexts & closures
JavaScript global object, execution contexts & closuresHDR1001
 
Designing For Ajax
Designing For AjaxDesigning For Ajax
Designing For AjaxBill Scott
 
LA CONTRATACION PUBLICA DE CONSULTORIA 1
LA CONTRATACION PUBLICA DE CONSULTORIA 1LA CONTRATACION PUBLICA DE CONSULTORIA 1
LA CONTRATACION PUBLICA DE CONSULTORIA 1utplgestion
 
Running YUI 3 on Node.js - JSConf 2010
Running YUI 3 on Node.js - JSConf 2010Running YUI 3 on Node.js - JSConf 2010
Running YUI 3 on Node.js - JSConf 2010Adam Moore
 
Function work in JavaScript
Function work in JavaScriptFunction work in JavaScript
Function work in JavaScriptRhio Kim
 
Advanced javascript
Advanced javascriptAdvanced javascript
Advanced javascriptDoeun KOCH
 
Ajax 101 Workshop
Ajax 101 WorkshopAjax 101 Workshop
Ajax 101 WorkshopBill Scott
 

Andere mochten auch (12)

Javascript this keyword
Javascript this keywordJavascript this keyword
Javascript this keyword
 
Coding Ajax
Coding AjaxCoding Ajax
Coding Ajax
 
JavaScript Execution Context
JavaScript Execution ContextJavaScript Execution Context
JavaScript Execution Context
 
"this" in JavaScript
"this" in JavaScript"this" in JavaScript
"this" in JavaScript
 
JavaScript global object, execution contexts & closures
JavaScript global object, execution contexts & closuresJavaScript global object, execution contexts & closures
JavaScript global object, execution contexts & closures
 
Designing For Ajax
Designing For AjaxDesigning For Ajax
Designing For Ajax
 
LA CONTRATACION PUBLICA DE CONSULTORIA 1
LA CONTRATACION PUBLICA DE CONSULTORIA 1LA CONTRATACION PUBLICA DE CONSULTORIA 1
LA CONTRATACION PUBLICA DE CONSULTORIA 1
 
Running YUI 3 on Node.js - JSConf 2010
Running YUI 3 on Node.js - JSConf 2010Running YUI 3 on Node.js - JSConf 2010
Running YUI 3 on Node.js - JSConf 2010
 
Function work in JavaScript
Function work in JavaScriptFunction work in JavaScript
Function work in JavaScript
 
Advanced JavaScript
Advanced JavaScriptAdvanced JavaScript
Advanced JavaScript
 
Advanced javascript
Advanced javascriptAdvanced javascript
Advanced javascript
 
Ajax 101 Workshop
Ajax 101 WorkshopAjax 101 Workshop
Ajax 101 Workshop
 

Ähnlich wie Expert JavaScript tricks of the masters

How to make Ajax work for you
How to make Ajax work for youHow to make Ajax work for you
How to make Ajax work for youSimon Willison
 
JavaScript Multithread or Single Thread.pptx
JavaScript Multithread or Single Thread.pptxJavaScript Multithread or Single Thread.pptx
JavaScript Multithread or Single Thread.pptxRAHITNATH
 
Javascript: the important bits
Javascript: the important bitsJavascript: the important bits
Javascript: the important bitsChris Saylor
 
Object-Oriented JavaScript
Object-Oriented JavaScriptObject-Oriented JavaScript
Object-Oriented JavaScriptkvangork
 
Object-Oriented Javascript
Object-Oriented JavascriptObject-Oriented Javascript
Object-Oriented Javascriptkvangork
 
JavaScript Advanced - Useful methods to power up your code
JavaScript Advanced - Useful methods to power up your codeJavaScript Advanced - Useful methods to power up your code
JavaScript Advanced - Useful methods to power up your codeLaurence Svekis ✔
 
TypeScript Introduction
TypeScript IntroductionTypeScript Introduction
TypeScript IntroductionDmitry Sheiko
 
ES6 - Next Generation Javascript
ES6 - Next Generation JavascriptES6 - Next Generation Javascript
ES6 - Next Generation JavascriptRamesh Nair
 
Think Async: Asynchronous Patterns in NodeJS
Think Async: Asynchronous Patterns in NodeJSThink Async: Asynchronous Patterns in NodeJS
Think Async: Asynchronous Patterns in NodeJSAdam L Barrett
 
Bonnes pratiques de développement avec Node js
Bonnes pratiques de développement avec Node jsBonnes pratiques de développement avec Node js
Bonnes pratiques de développement avec Node jsFrancois Zaninotto
 
The Return of JavaScript: 3 Open-Source Projects that are driving JavaScript'...
The Return of JavaScript: 3 Open-Source Projects that are driving JavaScript'...The Return of JavaScript: 3 Open-Source Projects that are driving JavaScript'...
The Return of JavaScript: 3 Open-Source Projects that are driving JavaScript'...Ben Teese
 
Workshop 5: JavaScript testing
Workshop 5: JavaScript testingWorkshop 5: JavaScript testing
Workshop 5: JavaScript testingVisual Engineering
 
Writing robust Node.js applications
Writing robust Node.js applicationsWriting robust Node.js applications
Writing robust Node.js applicationsTom Croucher
 
Rails-like JavaScript Using CoffeeScript, Backbone.js and Jasmine
Rails-like JavaScript Using CoffeeScript, Backbone.js and JasmineRails-like JavaScript Using CoffeeScript, Backbone.js and Jasmine
Rails-like JavaScript Using CoffeeScript, Backbone.js and JasmineRaimonds Simanovskis
 
Intro to Asynchronous Javascript
Intro to Asynchronous JavascriptIntro to Asynchronous Javascript
Intro to Asynchronous JavascriptGarrett Welson
 
Secrets of JavaScript Libraries
Secrets of JavaScript LibrariesSecrets of JavaScript Libraries
Secrets of JavaScript Librariesjeresig
 

Ähnlich wie Expert JavaScript tricks of the masters (20)

How to make Ajax work for you
How to make Ajax work for youHow to make Ajax work for you
How to make Ajax work for you
 
JavaScript Multithread or Single Thread.pptx
JavaScript Multithread or Single Thread.pptxJavaScript Multithread or Single Thread.pptx
JavaScript Multithread or Single Thread.pptx
 
Rxjs marble-testing
Rxjs marble-testingRxjs marble-testing
Rxjs marble-testing
 
Javascript: the important bits
Javascript: the important bitsJavascript: the important bits
Javascript: the important bits
 
Object-Oriented JavaScript
Object-Oriented JavaScriptObject-Oriented JavaScript
Object-Oriented JavaScript
 
Object-Oriented Javascript
Object-Oriented JavascriptObject-Oriented Javascript
Object-Oriented Javascript
 
JavaScript Advanced - Useful methods to power up your code
JavaScript Advanced - Useful methods to power up your codeJavaScript Advanced - Useful methods to power up your code
JavaScript Advanced - Useful methods to power up your code
 
TypeScript Introduction
TypeScript IntroductionTypeScript Introduction
TypeScript Introduction
 
Java script for web developer
Java script for web developerJava script for web developer
Java script for web developer
 
ES6 - Next Generation Javascript
ES6 - Next Generation JavascriptES6 - Next Generation Javascript
ES6 - Next Generation Javascript
 
Think Async: Asynchronous Patterns in NodeJS
Think Async: Asynchronous Patterns in NodeJSThink Async: Asynchronous Patterns in NodeJS
Think Async: Asynchronous Patterns in NodeJS
 
Bonnes pratiques de développement avec Node js
Bonnes pratiques de développement avec Node jsBonnes pratiques de développement avec Node js
Bonnes pratiques de développement avec Node js
 
The Return of JavaScript: 3 Open-Source Projects that are driving JavaScript'...
The Return of JavaScript: 3 Open-Source Projects that are driving JavaScript'...The Return of JavaScript: 3 Open-Source Projects that are driving JavaScript'...
The Return of JavaScript: 3 Open-Source Projects that are driving JavaScript'...
 
ES6: The Awesome Parts
ES6: The Awesome PartsES6: The Awesome Parts
ES6: The Awesome Parts
 
Workshop 5: JavaScript testing
Workshop 5: JavaScript testingWorkshop 5: JavaScript testing
Workshop 5: JavaScript testing
 
Writing robust Node.js applications
Writing robust Node.js applicationsWriting robust Node.js applications
Writing robust Node.js applications
 
Rails-like JavaScript Using CoffeeScript, Backbone.js and Jasmine
Rails-like JavaScript Using CoffeeScript, Backbone.js and JasmineRails-like JavaScript Using CoffeeScript, Backbone.js and Jasmine
Rails-like JavaScript Using CoffeeScript, Backbone.js and Jasmine
 
JavaScript Lessons 2023
JavaScript Lessons 2023JavaScript Lessons 2023
JavaScript Lessons 2023
 
Intro to Asynchronous Javascript
Intro to Asynchronous JavascriptIntro to Asynchronous Javascript
Intro to Asynchronous Javascript
 
Secrets of JavaScript Libraries
Secrets of JavaScript LibrariesSecrets of JavaScript Libraries
Secrets of JavaScript Libraries
 

Mehr von Ara Pehlivanian

Is it CrossFit or JavaScript?
Is it CrossFit or JavaScript?Is it CrossFit or JavaScript?
Is it CrossFit or JavaScript?Ara Pehlivanian
 
Becoming a jQuery expert
Becoming a jQuery expertBecoming a jQuery expert
Becoming a jQuery expertAra Pehlivanian
 
YUI 3: The Most Advance JavaScript Library in the World
YUI 3: The Most Advance JavaScript Library in the WorldYUI 3: The Most Advance JavaScript Library in the World
YUI 3: The Most Advance JavaScript Library in the WorldAra Pehlivanian
 
Twitterface: A viral marketing concept
Twitterface: A viral marketing conceptTwitterface: A viral marketing concept
Twitterface: A viral marketing conceptAra Pehlivanian
 
Worry Free Web Development
Worry Free Web DevelopmentWorry Free Web Development
Worry Free Web DevelopmentAra Pehlivanian
 

Mehr von Ara Pehlivanian (8)

Is it CrossFit or JavaScript?
Is it CrossFit or JavaScript?Is it CrossFit or JavaScript?
Is it CrossFit or JavaScript?
 
Becoming a jQuery expert
Becoming a jQuery expertBecoming a jQuery expert
Becoming a jQuery expert
 
YUI 3: The Most Advance JavaScript Library in the World
YUI 3: The Most Advance JavaScript Library in the WorldYUI 3: The Most Advance JavaScript Library in the World
YUI 3: The Most Advance JavaScript Library in the World
 
YUI Gallery
YUI GalleryYUI Gallery
YUI Gallery
 
Master your domain
Master your domainMaster your domain
Master your domain
 
Twitterface: A viral marketing concept
Twitterface: A viral marketing conceptTwitterface: A viral marketing concept
Twitterface: A viral marketing concept
 
Worry Free Web Development
Worry Free Web DevelopmentWorry Free Web Development
Worry Free Web Development
 
Scripting The Dom
Scripting The DomScripting The Dom
Scripting The Dom
 

Kürzlich hochgeladen

On Starlink, presented by Geoff Huston at NZNOG 2024
On Starlink, presented by Geoff Huston at NZNOG 2024On Starlink, presented by Geoff Huston at NZNOG 2024
On Starlink, presented by Geoff Huston at NZNOG 2024APNIC
 
GDG Cloud Southlake 32: Kyle Hettinger: Demystifying the Dark Web
GDG Cloud Southlake 32: Kyle Hettinger: Demystifying the Dark WebGDG Cloud Southlake 32: Kyle Hettinger: Demystifying the Dark Web
GDG Cloud Southlake 32: Kyle Hettinger: Demystifying the Dark WebJames Anderson
 
₹5.5k {Cash Payment}New Friends Colony Call Girls In [Delhi NIHARIKA] 🔝|97111...
₹5.5k {Cash Payment}New Friends Colony Call Girls In [Delhi NIHARIKA] 🔝|97111...₹5.5k {Cash Payment}New Friends Colony Call Girls In [Delhi NIHARIKA] 🔝|97111...
₹5.5k {Cash Payment}New Friends Colony Call Girls In [Delhi NIHARIKA] 🔝|97111...Diya Sharma
 
AWS Community DAY Albertini-Ellan Cloud Security (1).pptx
AWS Community DAY Albertini-Ellan Cloud Security (1).pptxAWS Community DAY Albertini-Ellan Cloud Security (1).pptx
AWS Community DAY Albertini-Ellan Cloud Security (1).pptxellan12
 
Chennai Call Girls Alwarpet Phone 🍆 8250192130 👅 celebrity escorts service
Chennai Call Girls Alwarpet Phone 🍆 8250192130 👅 celebrity escorts serviceChennai Call Girls Alwarpet Phone 🍆 8250192130 👅 celebrity escorts service
Chennai Call Girls Alwarpet Phone 🍆 8250192130 👅 celebrity escorts servicevipmodelshub1
 
'Future Evolution of the Internet' delivered by Geoff Huston at Everything Op...
'Future Evolution of the Internet' delivered by Geoff Huston at Everything Op...'Future Evolution of the Internet' delivered by Geoff Huston at Everything Op...
'Future Evolution of the Internet' delivered by Geoff Huston at Everything Op...APNIC
 
Call Girls In Saket Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Saket Delhi 💯Call Us 🔝8264348440🔝Call Girls In Saket Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Saket Delhi 💯Call Us 🔝8264348440🔝soniya singh
 
Russian Call girls in Dubai +971563133746 Dubai Call girls
Russian  Call girls in Dubai +971563133746 Dubai  Call girlsRussian  Call girls in Dubai +971563133746 Dubai  Call girls
Russian Call girls in Dubai +971563133746 Dubai Call girlsstephieert
 
Gram Darshan PPT cyber rural in villages of india
Gram Darshan PPT cyber rural  in villages of indiaGram Darshan PPT cyber rural  in villages of india
Gram Darshan PPT cyber rural in villages of indiaimessage0108
 
DDoS In Oceania and the Pacific, presented by Dave Phelan at NZNOG 2024
DDoS In Oceania and the Pacific, presented by Dave Phelan at NZNOG 2024DDoS In Oceania and the Pacific, presented by Dave Phelan at NZNOG 2024
DDoS In Oceania and the Pacific, presented by Dave Phelan at NZNOG 2024APNIC
 
Chennai Call Girls Porur Phone 🍆 8250192130 👅 celebrity escorts service
Chennai Call Girls Porur Phone 🍆 8250192130 👅 celebrity escorts serviceChennai Call Girls Porur Phone 🍆 8250192130 👅 celebrity escorts service
Chennai Call Girls Porur Phone 🍆 8250192130 👅 celebrity escorts servicesonalikaur4
 
VIP 7001035870 Find & Meet Hyderabad Call Girls LB Nagar high-profile Call Girl
VIP 7001035870 Find & Meet Hyderabad Call Girls LB Nagar high-profile Call GirlVIP 7001035870 Find & Meet Hyderabad Call Girls LB Nagar high-profile Call Girl
VIP 7001035870 Find & Meet Hyderabad Call Girls LB Nagar high-profile Call Girladitipandeya
 
AlbaniaDreamin24 - How to easily use an API with Flows
AlbaniaDreamin24 - How to easily use an API with FlowsAlbaniaDreamin24 - How to easily use an API with Flows
AlbaniaDreamin24 - How to easily use an API with FlowsThierry TROUIN ☁
 
Best VIP Call Girls Noida Sector 75 Call Me: 8448380779
Best VIP Call Girls Noida Sector 75 Call Me: 8448380779Best VIP Call Girls Noida Sector 75 Call Me: 8448380779
Best VIP Call Girls Noida Sector 75 Call Me: 8448380779Delhi Call girls
 
Delhi Call Girls Rohini 9711199171 ☎✔👌✔ Whatsapp Hard And Sexy Vip Call
Delhi Call Girls Rohini 9711199171 ☎✔👌✔ Whatsapp Hard And Sexy Vip CallDelhi Call Girls Rohini 9711199171 ☎✔👌✔ Whatsapp Hard And Sexy Vip Call
Delhi Call Girls Rohini 9711199171 ☎✔👌✔ Whatsapp Hard And Sexy Vip Callshivangimorya083
 
Russian Call Girls in Kolkata Ishita 🤌 8250192130 🚀 Vip Call Girls Kolkata
Russian Call Girls in Kolkata Ishita 🤌  8250192130 🚀 Vip Call Girls KolkataRussian Call Girls in Kolkata Ishita 🤌  8250192130 🚀 Vip Call Girls Kolkata
Russian Call Girls in Kolkata Ishita 🤌 8250192130 🚀 Vip Call Girls Kolkataanamikaraghav4
 

Kürzlich hochgeladen (20)

On Starlink, presented by Geoff Huston at NZNOG 2024
On Starlink, presented by Geoff Huston at NZNOG 2024On Starlink, presented by Geoff Huston at NZNOG 2024
On Starlink, presented by Geoff Huston at NZNOG 2024
 
GDG Cloud Southlake 32: Kyle Hettinger: Demystifying the Dark Web
GDG Cloud Southlake 32: Kyle Hettinger: Demystifying the Dark WebGDG Cloud Southlake 32: Kyle Hettinger: Demystifying the Dark Web
GDG Cloud Southlake 32: Kyle Hettinger: Demystifying the Dark Web
 
₹5.5k {Cash Payment}New Friends Colony Call Girls In [Delhi NIHARIKA] 🔝|97111...
₹5.5k {Cash Payment}New Friends Colony Call Girls In [Delhi NIHARIKA] 🔝|97111...₹5.5k {Cash Payment}New Friends Colony Call Girls In [Delhi NIHARIKA] 🔝|97111...
₹5.5k {Cash Payment}New Friends Colony Call Girls In [Delhi NIHARIKA] 🔝|97111...
 
Dwarka Sector 26 Call Girls | Delhi | 9999965857 🫦 Vanshika Verma More Our Se...
Dwarka Sector 26 Call Girls | Delhi | 9999965857 🫦 Vanshika Verma More Our Se...Dwarka Sector 26 Call Girls | Delhi | 9999965857 🫦 Vanshika Verma More Our Se...
Dwarka Sector 26 Call Girls | Delhi | 9999965857 🫦 Vanshika Verma More Our Se...
 
AWS Community DAY Albertini-Ellan Cloud Security (1).pptx
AWS Community DAY Albertini-Ellan Cloud Security (1).pptxAWS Community DAY Albertini-Ellan Cloud Security (1).pptx
AWS Community DAY Albertini-Ellan Cloud Security (1).pptx
 
Chennai Call Girls Alwarpet Phone 🍆 8250192130 👅 celebrity escorts service
Chennai Call Girls Alwarpet Phone 🍆 8250192130 👅 celebrity escorts serviceChennai Call Girls Alwarpet Phone 🍆 8250192130 👅 celebrity escorts service
Chennai Call Girls Alwarpet Phone 🍆 8250192130 👅 celebrity escorts service
 
'Future Evolution of the Internet' delivered by Geoff Huston at Everything Op...
'Future Evolution of the Internet' delivered by Geoff Huston at Everything Op...'Future Evolution of the Internet' delivered by Geoff Huston at Everything Op...
'Future Evolution of the Internet' delivered by Geoff Huston at Everything Op...
 
Call Girls In Saket Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Saket Delhi 💯Call Us 🔝8264348440🔝Call Girls In Saket Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Saket Delhi 💯Call Us 🔝8264348440🔝
 
Russian Call girls in Dubai +971563133746 Dubai Call girls
Russian  Call girls in Dubai +971563133746 Dubai  Call girlsRussian  Call girls in Dubai +971563133746 Dubai  Call girls
Russian Call girls in Dubai +971563133746 Dubai Call girls
 
Gram Darshan PPT cyber rural in villages of india
Gram Darshan PPT cyber rural  in villages of indiaGram Darshan PPT cyber rural  in villages of india
Gram Darshan PPT cyber rural in villages of india
 
DDoS In Oceania and the Pacific, presented by Dave Phelan at NZNOG 2024
DDoS In Oceania and the Pacific, presented by Dave Phelan at NZNOG 2024DDoS In Oceania and the Pacific, presented by Dave Phelan at NZNOG 2024
DDoS In Oceania and the Pacific, presented by Dave Phelan at NZNOG 2024
 
Call Girls In South Ex 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SERVICE
Call Girls In South Ex 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SERVICECall Girls In South Ex 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SERVICE
Call Girls In South Ex 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SERVICE
 
Rohini Sector 22 Call Girls Delhi 9999965857 @Sabina Saikh No Advance
Rohini Sector 22 Call Girls Delhi 9999965857 @Sabina Saikh No AdvanceRohini Sector 22 Call Girls Delhi 9999965857 @Sabina Saikh No Advance
Rohini Sector 22 Call Girls Delhi 9999965857 @Sabina Saikh No Advance
 
Chennai Call Girls Porur Phone 🍆 8250192130 👅 celebrity escorts service
Chennai Call Girls Porur Phone 🍆 8250192130 👅 celebrity escorts serviceChennai Call Girls Porur Phone 🍆 8250192130 👅 celebrity escorts service
Chennai Call Girls Porur Phone 🍆 8250192130 👅 celebrity escorts service
 
Rohini Sector 6 Call Girls Delhi 9999965857 @Sabina Saikh No Advance
Rohini Sector 6 Call Girls Delhi 9999965857 @Sabina Saikh No AdvanceRohini Sector 6 Call Girls Delhi 9999965857 @Sabina Saikh No Advance
Rohini Sector 6 Call Girls Delhi 9999965857 @Sabina Saikh No Advance
 
VIP 7001035870 Find & Meet Hyderabad Call Girls LB Nagar high-profile Call Girl
VIP 7001035870 Find & Meet Hyderabad Call Girls LB Nagar high-profile Call GirlVIP 7001035870 Find & Meet Hyderabad Call Girls LB Nagar high-profile Call Girl
VIP 7001035870 Find & Meet Hyderabad Call Girls LB Nagar high-profile Call Girl
 
AlbaniaDreamin24 - How to easily use an API with Flows
AlbaniaDreamin24 - How to easily use an API with FlowsAlbaniaDreamin24 - How to easily use an API with Flows
AlbaniaDreamin24 - How to easily use an API with Flows
 
Best VIP Call Girls Noida Sector 75 Call Me: 8448380779
Best VIP Call Girls Noida Sector 75 Call Me: 8448380779Best VIP Call Girls Noida Sector 75 Call Me: 8448380779
Best VIP Call Girls Noida Sector 75 Call Me: 8448380779
 
Delhi Call Girls Rohini 9711199171 ☎✔👌✔ Whatsapp Hard And Sexy Vip Call
Delhi Call Girls Rohini 9711199171 ☎✔👌✔ Whatsapp Hard And Sexy Vip CallDelhi Call Girls Rohini 9711199171 ☎✔👌✔ Whatsapp Hard And Sexy Vip Call
Delhi Call Girls Rohini 9711199171 ☎✔👌✔ Whatsapp Hard And Sexy Vip Call
 
Russian Call Girls in Kolkata Ishita 🤌 8250192130 🚀 Vip Call Girls Kolkata
Russian Call Girls in Kolkata Ishita 🤌  8250192130 🚀 Vip Call Girls KolkataRussian Call Girls in Kolkata Ishita 🤌  8250192130 🚀 Vip Call Girls Kolkata
Russian Call Girls in Kolkata Ishita 🤌 8250192130 🚀 Vip Call Girls Kolkata
 

Expert JavaScript tricks of the masters