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
Evan Solomon
June 08, 2013
Technology
1
530
JavaScript Beyond jQuery
WordCamp Milwaukee
Evan Solomon
June 08, 2013
Tweet
Share
More Decks by Evan Solomon
See All by Evan Solomon
Demystifying the Black Box of WordPress Core
evansolomon
1
3.4k
WordCamp Las Vegas -- Make stuff that people want
evansolomon
2
2.9k
You Have No Idea What Your Users Want
evansolomon
1
520
You Don't Know People
evansolomon
2
850
Other Decks in Technology
See All in Technology
Github Copilot エージェントモードで試してみた
ochtum
0
110
【PHPカンファレンス 2025】PHPを愛するひとに伝えたい PHPとキャリアの話
tenshoku_draft
0
120
データプラットフォーム技術におけるメダリオンアーキテクチャという考え方/DataPlatformWithMedallionArchitecture
smdmts
5
650
Wasm元年
askua
0
150
フィンテック養成勉強会#54
finengine
0
180
Amazon Bedrockで実現する 新たな学習体験
kzkmaeda
2
610
AWS Organizations 新機能!マルチパーティ承認の紹介
yhana
1
160
Should Our Project Join the CNCF? (Japanese Recap)
whywaita
PRO
0
110
AIとともに進化するエンジニアリング / Engineering-Evolving-with-AI_final.pdf
lycorptech_jp
PRO
0
110
Tech-Verse 2025 Global CTO Session
lycorptech_jp
PRO
0
560
「Chatwork」の認証基盤の移行とログ活用によるプロダクト改善
kubell_hr
1
200
mrubyと micro-ROSが繋ぐロボットの世界
kishima
2
350
Featured
See All Featured
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
How STYLIGHT went responsive
nonsquared
100
5.6k
GraphQLとの向き合い方2022年版
quramy
49
14k
Reflections from 52 weeks, 52 projects
jeffersonlam
351
20k
Why You Should Never Use an ORM
jnunemaker
PRO
58
9.4k
Gamification - CAS2011
davidbonilla
81
5.3k
Making the Leap to Tech Lead
cromwellryan
134
9.4k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
48
2.8k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Art, The Web, and Tiny UX
lynnandtonic
299
21k
Code Review Best Practice
trishagee
68
18k
Building an army of robots
kneath
306
45k
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);