SlideShare uma empresa Scribd logo
1 de 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

Mais conteúdo relacionado

Mais procurados

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
 

Mais procurados (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
 

Destaque

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
 

Destaque (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
 

Semelhante a 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
 

Semelhante a 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
 

Mais de 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
 

Mais de 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
 

Último

办理多伦多大学毕业证成绩单|购买加拿大UTSG文凭证书
办理多伦多大学毕业证成绩单|购买加拿大UTSG文凭证书办理多伦多大学毕业证成绩单|购买加拿大UTSG文凭证书
办理多伦多大学毕业证成绩单|购买加拿大UTSG文凭证书zdzoqco
 
Magic exist by Marta Loveguard - presentation.pptx
Magic exist by Marta Loveguard - presentation.pptxMagic exist by Marta Loveguard - presentation.pptx
Magic exist by Marta Loveguard - presentation.pptxMartaLoveguard
 
Intellectual property rightsand its types.pptx
Intellectual property rightsand its types.pptxIntellectual property rightsand its types.pptx
Intellectual property rightsand its types.pptxBipin Adhikari
 
Film cover research (1).pptxsdasdasdasdasdasa
Film cover research (1).pptxsdasdasdasdasdasaFilm cover research (1).pptxsdasdasdasdasdasa
Film cover research (1).pptxsdasdasdasdasdasa494f574xmv
 
Potsdam FH学位证,波茨坦应用技术大学毕业证书1:1制作
Potsdam FH学位证,波茨坦应用技术大学毕业证书1:1制作Potsdam FH学位证,波茨坦应用技术大学毕业证书1:1制作
Potsdam FH学位证,波茨坦应用技术大学毕业证书1:1制作ys8omjxb
 
SCM Symposium PPT Format Customer loyalty is predi
SCM Symposium PPT Format Customer loyalty is prediSCM Symposium PPT Format Customer loyalty is predi
SCM Symposium PPT Format Customer loyalty is predieusebiomeyer
 
Blepharitis inflammation of eyelid symptoms cause everything included along w...
Blepharitis inflammation of eyelid symptoms cause everything included along w...Blepharitis inflammation of eyelid symptoms cause everything included along w...
Blepharitis inflammation of eyelid symptoms cause everything included along w...Excelmac1
 
定制(Management毕业证书)新加坡管理大学毕业证成绩单原版一比一
定制(Management毕业证书)新加坡管理大学毕业证成绩单原版一比一定制(Management毕业证书)新加坡管理大学毕业证成绩单原版一比一
定制(Management毕业证书)新加坡管理大学毕业证成绩单原版一比一Fs
 
定制(Lincoln毕业证书)新西兰林肯大学毕业证成绩单原版一比一
定制(Lincoln毕业证书)新西兰林肯大学毕业证成绩单原版一比一定制(Lincoln毕业证书)新西兰林肯大学毕业证成绩单原版一比一
定制(Lincoln毕业证书)新西兰林肯大学毕业证成绩单原版一比一Fs
 
A Good Girl's Guide to Murder (A Good Girl's Guide to Murder, #1)
A Good Girl's Guide to Murder (A Good Girl's Guide to Murder, #1)A Good Girl's Guide to Murder (A Good Girl's Guide to Murder, #1)
A Good Girl's Guide to Murder (A Good Girl's Guide to Murder, #1)Christopher H Felton
 
Contact Rya Baby for Call Girls New Delhi
Contact Rya Baby for Call Girls New DelhiContact Rya Baby for Call Girls New Delhi
Contact Rya Baby for Call Girls New Delhimiss dipika
 
办理(UofR毕业证书)罗切斯特大学毕业证成绩单原版一比一
办理(UofR毕业证书)罗切斯特大学毕业证成绩单原版一比一办理(UofR毕业证书)罗切斯特大学毕业证成绩单原版一比一
办理(UofR毕业证书)罗切斯特大学毕业证成绩单原版一比一z xss
 
Call Girls In The Ocean Pearl Retreat Hotel New Delhi 9873777170
Call Girls In The Ocean Pearl Retreat Hotel New Delhi 9873777170Call Girls In The Ocean Pearl Retreat Hotel New Delhi 9873777170
Call Girls In The Ocean Pearl Retreat Hotel New Delhi 9873777170Sonam Pathan
 
Git and Github workshop GDSC MLRITM
Git and Github  workshop GDSC MLRITMGit and Github  workshop GDSC MLRITM
Git and Github workshop GDSC MLRITMgdsc13
 
Call Girls South Delhi Delhi reach out to us at ☎ 9711199012
Call Girls South Delhi Delhi reach out to us at ☎ 9711199012Call Girls South Delhi Delhi reach out to us at ☎ 9711199012
Call Girls South Delhi Delhi reach out to us at ☎ 9711199012rehmti665
 
Call Girls Near The Suryaa Hotel New Delhi 9873777170
Call Girls Near The Suryaa Hotel New Delhi 9873777170Call Girls Near The Suryaa Hotel New Delhi 9873777170
Call Girls Near The Suryaa Hotel New Delhi 9873777170Sonam Pathan
 
『澳洲文凭』买詹姆士库克大学毕业证书成绩单办理澳洲JCU文凭学位证书
『澳洲文凭』买詹姆士库克大学毕业证书成绩单办理澳洲JCU文凭学位证书『澳洲文凭』买詹姆士库克大学毕业证书成绩单办理澳洲JCU文凭学位证书
『澳洲文凭』买詹姆士库克大学毕业证书成绩单办理澳洲JCU文凭学位证书rnrncn29
 
Top 10 Interactive Website Design Trends in 2024.pptx
Top 10 Interactive Website Design Trends in 2024.pptxTop 10 Interactive Website Design Trends in 2024.pptx
Top 10 Interactive Website Design Trends in 2024.pptxDyna Gilbert
 

Último (20)

办理多伦多大学毕业证成绩单|购买加拿大UTSG文凭证书
办理多伦多大学毕业证成绩单|购买加拿大UTSG文凭证书办理多伦多大学毕业证成绩单|购买加拿大UTSG文凭证书
办理多伦多大学毕业证成绩单|购买加拿大UTSG文凭证书
 
Magic exist by Marta Loveguard - presentation.pptx
Magic exist by Marta Loveguard - presentation.pptxMagic exist by Marta Loveguard - presentation.pptx
Magic exist by Marta Loveguard - presentation.pptx
 
Intellectual property rightsand its types.pptx
Intellectual property rightsand its types.pptxIntellectual property rightsand its types.pptx
Intellectual property rightsand its types.pptx
 
Film cover research (1).pptxsdasdasdasdasdasa
Film cover research (1).pptxsdasdasdasdasdasaFilm cover research (1).pptxsdasdasdasdasdasa
Film cover research (1).pptxsdasdasdasdasdasa
 
Potsdam FH学位证,波茨坦应用技术大学毕业证书1:1制作
Potsdam FH学位证,波茨坦应用技术大学毕业证书1:1制作Potsdam FH学位证,波茨坦应用技术大学毕业证书1:1制作
Potsdam FH学位证,波茨坦应用技术大学毕业证书1:1制作
 
SCM Symposium PPT Format Customer loyalty is predi
SCM Symposium PPT Format Customer loyalty is prediSCM Symposium PPT Format Customer loyalty is predi
SCM Symposium PPT Format Customer loyalty is predi
 
Blepharitis inflammation of eyelid symptoms cause everything included along w...
Blepharitis inflammation of eyelid symptoms cause everything included along w...Blepharitis inflammation of eyelid symptoms cause everything included along w...
Blepharitis inflammation of eyelid symptoms cause everything included along w...
 
定制(Management毕业证书)新加坡管理大学毕业证成绩单原版一比一
定制(Management毕业证书)新加坡管理大学毕业证成绩单原版一比一定制(Management毕业证书)新加坡管理大学毕业证成绩单原版一比一
定制(Management毕业证书)新加坡管理大学毕业证成绩单原版一比一
 
定制(Lincoln毕业证书)新西兰林肯大学毕业证成绩单原版一比一
定制(Lincoln毕业证书)新西兰林肯大学毕业证成绩单原版一比一定制(Lincoln毕业证书)新西兰林肯大学毕业证成绩单原版一比一
定制(Lincoln毕业证书)新西兰林肯大学毕业证成绩单原版一比一
 
Hot Sexy call girls in Rk Puram 🔝 9953056974 🔝 Delhi escort Service
Hot Sexy call girls in  Rk Puram 🔝 9953056974 🔝 Delhi escort ServiceHot Sexy call girls in  Rk Puram 🔝 9953056974 🔝 Delhi escort Service
Hot Sexy call girls in Rk Puram 🔝 9953056974 🔝 Delhi escort Service
 
Model Call Girl in Jamuna Vihar Delhi reach out to us at 🔝9953056974🔝
Model Call Girl in  Jamuna Vihar Delhi reach out to us at 🔝9953056974🔝Model Call Girl in  Jamuna Vihar Delhi reach out to us at 🔝9953056974🔝
Model Call Girl in Jamuna Vihar Delhi reach out to us at 🔝9953056974🔝
 
A Good Girl's Guide to Murder (A Good Girl's Guide to Murder, #1)
A Good Girl's Guide to Murder (A Good Girl's Guide to Murder, #1)A Good Girl's Guide to Murder (A Good Girl's Guide to Murder, #1)
A Good Girl's Guide to Murder (A Good Girl's Guide to Murder, #1)
 
Contact Rya Baby for Call Girls New Delhi
Contact Rya Baby for Call Girls New DelhiContact Rya Baby for Call Girls New Delhi
Contact Rya Baby for Call Girls New Delhi
 
办理(UofR毕业证书)罗切斯特大学毕业证成绩单原版一比一
办理(UofR毕业证书)罗切斯特大学毕业证成绩单原版一比一办理(UofR毕业证书)罗切斯特大学毕业证成绩单原版一比一
办理(UofR毕业证书)罗切斯特大学毕业证成绩单原版一比一
 
Call Girls In The Ocean Pearl Retreat Hotel New Delhi 9873777170
Call Girls In The Ocean Pearl Retreat Hotel New Delhi 9873777170Call Girls In The Ocean Pearl Retreat Hotel New Delhi 9873777170
Call Girls In The Ocean Pearl Retreat Hotel New Delhi 9873777170
 
Git and Github workshop GDSC MLRITM
Git and Github  workshop GDSC MLRITMGit and Github  workshop GDSC MLRITM
Git and Github workshop GDSC MLRITM
 
Call Girls South Delhi Delhi reach out to us at ☎ 9711199012
Call Girls South Delhi Delhi reach out to us at ☎ 9711199012Call Girls South Delhi Delhi reach out to us at ☎ 9711199012
Call Girls South Delhi Delhi reach out to us at ☎ 9711199012
 
Call Girls Near The Suryaa Hotel New Delhi 9873777170
Call Girls Near The Suryaa Hotel New Delhi 9873777170Call Girls Near The Suryaa Hotel New Delhi 9873777170
Call Girls Near The Suryaa Hotel New Delhi 9873777170
 
『澳洲文凭』买詹姆士库克大学毕业证书成绩单办理澳洲JCU文凭学位证书
『澳洲文凭』买詹姆士库克大学毕业证书成绩单办理澳洲JCU文凭学位证书『澳洲文凭』买詹姆士库克大学毕业证书成绩单办理澳洲JCU文凭学位证书
『澳洲文凭』买詹姆士库克大学毕业证书成绩单办理澳洲JCU文凭学位证书
 
Top 10 Interactive Website Design Trends in 2024.pptx
Top 10 Interactive Website Design Trends in 2024.pptxTop 10 Interactive Website Design Trends in 2024.pptx
Top 10 Interactive Website Design Trends in 2024.pptx
 

Expert JavaScript tricks of the masters