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
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Evan Solomon
June 08, 2013
Technology
530
1
Share
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.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
860
Other Decks in Technology
See All in Technology
「誰一人取り残されない」 AIエージェント時代のプロダクト設計思想 Product Management Summit 2026
mizushimac
1
750
マルチエージェント × ハーネスエンジニアリング × GitLab Duo Agent Platformで実現する「AIエージェントに仕事をさせる時代へ。」 / 20260421 GitLab Duo Agent Platform
n11sh1
0
180
AI駆動1on1〜AIに自分を育ててもらう〜
yoshiakiyasuda
0
140
20260428_Product Management Summit_Loglass_JoeHirose
loglassjoe
2
2.8k
AI時代のガードレールとしてのAPIガバナンス
nagix
0
300
社内エンジニア勉強会の醍醐味と苦しみ/tamadev
nishiuma
0
230
これからの「データマネジメント」の話をしよう
sansantech
PRO
0
140
Microsoft 365 / Microsoft 365 Copilot : 自分の状態を確認する「ラベル」について
taichinakamura
0
330
マルチプロダクトの信頼性を効率良く保っていくために
kworkdev
PRO
0
170
Hacobu Tech Deck
hacobu
PRO
0
120
独断と偏見で試してみる、 シングル or マルチエージェント どっちがいいの?
shichijoyuhi
1
110
データを"持てない"環境でのアノテーション基盤設計
sansantech
PRO
1
140
Featured
See All Featured
Leo the Paperboy
mayatellez
7
1.7k
Technical Leadership for Architectural Decision Making
baasie
3
330
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.7k
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.5k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
52k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.1k
Google's AI Overviews - The New Search
badams
0
980
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
55k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
61k
Design in an AI World
tapps
1
200
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.3k
Designing for Performance
lara
611
70k
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);