js interpreter interpreted

24
The JavaScript Interpreter, Interpreted @marthakelly

Upload: martha-schumann

Post on 10-May-2015

555 views

Category:

Technology


0 download

DESCRIPTION

Slide deck from Strangeloop 2013

TRANSCRIPT

Page 1: Js interpreter interpreted

The JavaScript Interpreter, Interpreted

@marthakelly

Page 2: Js interpreter interpreted

Software’s Primary Technical Imperative is_________________

Page 3: Js interpreter interpreted

Software’s Primary Technical Imperative ismanaging complexity

Page 4: Js interpreter interpreted

JavaScript is (usually) interpreted

Source Code >> Parser >> AST >> Bytecode >>

Machine Code

Page 5: Js interpreter interpreted

JavaScript is...really weird.

JavaScript is...really wonderful

● (nearly) everything is an object

● functions are first class objects

○ variables

○ object methods

○ arrays

○ passed as arguments

○ returned as values

Page 6: Js interpreter interpreted

To understand JavaScript you must understand

how the JavaScript creates function objects.

Page 7: Js interpreter interpreted

Function Objects have two stages

1. Creation

a. << magic happens!>>

b. determines scope and context

2. Execution

a. function is run

Page 8: Js interpreter interpreted

It’s all about (Execution) Context

All JavaScript code is executed through an

execution context

● Global

● Function

● Eval

Page 9: Js interpreter interpreted

Execution Context Stacks

var kitty = function() {console.log(“kitty”);

}

var hello = function() {console.log(“hello”);kitty();

}

hello();

Stacks:

[[ Function Kitty Context ]]

[[ Function Hello Context ]]

[[ Global Execution Context ]]

Page 10: Js interpreter interpreted

Execution Context is an “object”

var executionContext = {

variableObject: {},

scopeChain: {},

this: {}

}

Page 11: Js interpreter interpreted

var executionContext = {

variableObject: {

arguments: {

parameterName: argumentValue;

},

functionName: pointer;*

variableName: undefined;*

}

...

Page 12: Js interpreter interpreted

var kitten = function() {

console.log(mew);

var mew = 'Mew!';

}

// is interpreted as

var kitten = function() {

var mew = undefined;

console.log(mew);

mew = 'Mew!';

}

kitten() // undefined

Page 13: Js interpreter interpreted

The properties created on the Variable object

for local variable declarations initially

assigned as undefined.

Page 14: Js interpreter interpreted

Despite JavaScript’s C-like syntax, JavaScript

does not have block level scoping.

JavaScript has function scope (lexical scoping)

Scope

Page 15: Js interpreter interpreted

Scope chainfunctions have the scope chain of the execution context in

which they are created assigned to their internal [[scope]]

property.+------------------------------+| global variable obj |+------------------------------+

^

| +-----------------------------+ | variable obj for outer call | +-----------------------------+

^

| +-----------------------------+ | variable obj for inner call | +-----------------------------+

Page 16: Js interpreter interpreted

Resolving Identifiers

JavaScript traverses up the scope chain, moving locally to globally.

Note:

Identifiers are resolved against the scope chain. ECMA 262 categorizes this as a keyword rather than an identifier.

Page 17: Js interpreter interpreted

“this”

this holds a reference to the object that the function is being applied to.

This doesn't necessarily means that this will equal the object where the function is stored.

Page 18: Js interpreter interpreted

GO AND FIND BEE AND PUPPYCAT ON YOUTUBE NOW

Page 19: Js interpreter interpreted

var bee = {name: 'Bee'};

var puppycat = {name: 'PuppyCat'};

bee.sayHello = function(){

return "Hi, I'm " + this.name;

}

puppycat.sayHello = bee.sayHello;

Page 20: Js interpreter interpreted

var bee = {name: 'Bee'};

var puppycat = {name: 'PuppyCat'};

bee.sayHello = function(){

return "Hi, I'm " + this.name;

}

puppycat.sayHello = bee.sayHello;

// Hi, I’m PuppyCat

Page 21: Js interpreter interpreted

“this”

● top level function○ global object**

● method○ the object it’s applied to

● constructor○ the created object

Page 22: Js interpreter interpreted

Omg, Closures

A closure is created when a function

remembers the variables in its scope when it

was created.

Page 23: Js interpreter interpreted

var findTheKitten = function() { var secret = “under the bed”; return { guess: function(guess) {

if (guess === secret) { console.log(“YUP”);} else {

console.log(“NOPE”);}

} }}var game = findTheKitten();game.guess(“in the closet”); // NOPEgame.guess(“under the bed”); // YUP

Page 24: Js interpreter interpreted

Hopefully now you know more about

how JS works

Thanks, everyone!

@marthakelly