Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
JavaScript Beyond jQuery
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Evan Solomon
June 08, 2013
Technology
530
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
JavaScript Beyond jQuery
WordCamp Milwaukee
Evan Solomon
June 08, 2013
More Decks by Evan Solomon
See All by Evan Solomon
Demystifying the Black Box of WordPress Core
evansolomon
1
3.5k
WordCamp Las Vegas -- Make stuff that people want
evansolomon
2
2.9k
You Have No Idea What Your Users Want
evansolomon
1
530
You Don't Know People
evansolomon
2
860
Other Decks in Technology
See All in Technology
Eight Engineering Unit 紹介資料
sansan33
PRO
3
8.3k
Digitization部 紹介資料
sansan33
PRO
2
7.8k
AI時代におけるプロダクト横断勉強会の設計
zozotech
PRO
0
110
研究開発部の紹介 / Sansan R&D Profile
sansan33
PRO
4
25k
DGX Sparkを2台使って いろいろ動かす話
sonoda_mj
1
110
When Token Pruning is Worse than Random: Understanding Visual Token Information in VLLMs
sansantech
PRO
0
230
Cloudflare製品を活用した AIガバナンス実践入門 / AI governance with Cloudflare Service
delta_tech
1
180
AI駆動開発をチームに根付かせる - 「1行も書かない」チームがHarnessを育てた1年 -
kenichirokimura
6
3.6k
IDperturb: Enhancing Variation in Synthetic Face Generation via Angular Perturbation
sansantech
PRO
0
100
Introduction to Sansan Meishi Maker Development Engineer
sansan33
PRO
0
470
Bet AI Day 2026丨バクラク Autopilot、業務システムの再設計
layerx
PRO
1
780
Continuous Delivery! It is not what you think it is
tdpauw
0
100
Featured
See All Featured
4 Signs Your Business is Dying
shpigford
187
23k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
290
Building a Scalable Design System with Sketch
lauravandoore
463
34k
The Invisible Side of Design
smashingmag
301
52k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
230
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
500
Navigating Weather and Climate Data
rabernat
0
500
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
450
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
2
3.8k
It's Worth the Effort
3n
188
29k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.5k
Transcript
JavaScript Beyond $(document).ready()
speakerdeck.com/ evansolomon/ javascript-beyond-jquery
var name = 'Evan Solomon', twitter = name .replace(/ /g,
'') .replace(/^/, '@') .toLowerCase();
JavaScript != jQuery
1.Scope 2.Functions 3.Context 4.Inheritance 5.Control Flow
1. Scope
Always use the var keyword in declarations
var place = 'Milwaukee'; console.log(place); // 'Milwaukee'
Variables are implicitly global
var place = 'Milwaukee'; place === window.place; // true place
=== this.place; // true
Variable access flows down
var place = 'Milwaukee'; function where() { return place; }
where(); // 'Milwaukee'
2. Functions
Functions are closures
function quiet() { var whisper = 'Boom!'; } console.log(whisper); //
Undefined
But don’t forget var
function noisy() { oops = 'Boom!'; } console.log(oops); // 'Boom!'
Functions can be anonymous
jQuery(function() { return 'Ready!'; });
jQuery(function($) { $('.header').hide(); }); // We can use the $
to access jQuery in WordPress
Functions can execute themselves
(function() { return 'See?'; })(); // 'See?'
3. Context
Everything is an object Well, almost everything
var talk = function() { console.log('Hello!'); }; talk instanceof Object
// true
'Evan'.length // 4
var people = [ 'Evan', 'Alison' ]; people.join(', '); //
'Evan, Alison'
The this keyword gives context
this === window; // true
var context = 'global'; (function() { return this.context; })(); //
'global'
var context = 'global', stuff = { context: 'object', show:
function() { return this.context; } }; stuff.show(); // object
var Thing = function() { this.context = 'instance'; this.show =
function() { return this.context; }; }; thing = new Thing; thing.show(); // instance
Context is tricky
var context = 'global', stuff = { context: 'object', show:
function() { return this.context; } }, ohnoes = stuff.show; ohnoes(); // global
Context is controllable
var context = 'the window', show = function() { return
this.context; }; show.call(); // 'the window' show.call({context:'anything'}); // 'anything'
Context can be bound
var that = {context: 'safe'}, show = function() { return
this.context; }, bound = function() { return show.apply(that); }; show(); // undefined bound(); // 'safe'
4. Inheritance
Inheritance comes from prototypes
var nums = [1, 2]; nums.slice === Array.prototype.slice // true
nums.slice === nums.constructor.prototype.slice // true nums.constructor === Array // true
String.prototype.canadianize = function() { return this + ', eh!'; };
'Hello'.canadianize(); // 'Hello, eh!'
var evan = new Person('Evan'), john = new Person('Alison'); Person.prototype.sayHi
= function() { return 'I am ' + this.name; }; evan.sayHi(); // 'I am Evan' john.sayHi(); // 'I am Alison'
5. Control Flow
JavaScript is often asynchronous
$content = wp_remote_get($url); // $content is ready to use
var content = $.get(url); // content is *not* the body
of the remote response
$.get(url, { success: function(content) { // Now you can use
content } });
$(document).ready(function() { // Now the DOM is loaded });
$(function() { // Now the DOM is loaded }); https://github.com/jquery/
jquery/blob/2.0.2/src/ core.js#L162-L166
$('.thing').on('click', function() { // Now the element has been clicked
});
var request = $.get(url); request.done(function(content) { // Now the content
is available });
Thanks
Underscore is a utility library
var wordcamps = [ {place: 'Milwauke', when: 'today'}, {place: 'San
Francisco', when: 'later'}, ]; _.pluck(wordcamps, 'when'); // ['today', 'later']
var people = [ 'Evan', 'John', 'Alison', 'John' ]; _.uniq(people);
// ['Evan', 'John', 'Alison']
var go = function() { return 'Be patient'; }, notYet
= _.after(2, go); notYet(); // Undefined notYet(); // 'Be patient'
Underscore has great docs underscorejs.org
CoffeeScript compiles to JavaScript
var notYet = _.after(2, function() { return 'Be patient'; }
); notYet(); // Undefined notYet(); // 'Be patient'
notYet = _.after 2, -> 'Be patient' notYet() // Undefined
notYet() // 'Be patient'
easyObject = key: 'val' more: 'No problem' var easyObject; easyObject
= { key: 'val', more: 'No problem' };
implicitReturns = -> 'This is fun' implicitReturns() // 'This is
fun'
coffeescript.org & codeschool.com
Node.js is JavaScript on the server
var fs = require('fs'); fs.readFile('./stuff.txt', function(err, data) { console.log(data.toString()); });
var http = require('http'), server = function (req, res) {
res.end('Hello World!\n'); }; http.createServer(server) .listen(8080);