Java. Script in Browser

Содержание

Слайд 2

Agenda

JS in Browser
Events
Memory
Closure

[1]

[2]

[3]

[4]

Agenda JS in Browser Events Memory Closure [1] [2] [3] [4]

Слайд 3

JavaScript in Browser

JavaScript in Browser

Слайд 4

JavaScript in Browser

BOM

window

DOM

JavaScript in Browser BOM window DOM

Слайд 6

Description

How JavaScript communicates with the world?
In outline this mechanism works by next

Description How JavaScript communicates with the world? In outline this mechanism works
scenario: user does something and this action is an event for browser. JavaScript observes pages in the browser. And if event has occurred, script will be activated.

[1]

Слайд 7

Event handling

But JavaScript doesn't observe events by default. You should specify to

Event handling But JavaScript doesn't observe events by default. You should specify
your code what events are interesting for it.
There are 3 basic ways to subscribe to an event:
- inline in HTML
- using of onevent attribute
using special methods
First and second ways are deprecated for present days. Let's take a look at event handling in more details.

[1]

[2]

Слайд 8

Inline handling

Imagine that we have some HTML-element, for example

Inline handling Imagine that we have some HTML-element, for example and we
want to do some action when user clicks the button.


First way: inline adding of JavaScript into HTML. If we use this technique, we should update HTML-page and set some JS code in onevent attribute of HTML-element.

Never use this way, because it influences HTML and JavaScript simultaneously. So let's look at the next option!

[1]

[2]

Слайд 9

Using of onevent attribute

btn.onclick = action;

The next way doesn't touch HTML.

Using of onevent attribute btn.onclick = action; The next way doesn't touch
For adding event handler you need to find an object that is a JavaScript model of HTML-element.

For example, your button has id btn:


Where action is some function
defined as function action () { . . . }

Then desired object will be created automatically. Next you can use an onclick property:

[1]

[2]

Слайд 10

Proper ways

Previous way makes sense, but has some limitations. For example you

Proper ways Previous way makes sense, but has some limitations. For example
can not use more than one handler for one event, because you set a function on onevent attribute directly.

btn.addEventListener(“click”, action, false);

But this method doesn't work in IE. For IE you should use:

Next method helps solve this and some other problems:

btn.attachEvent(“onclick”, action);

[1]

[2]

Слайд 11

Proper ways

btn.removeEventListener(“click”, action);

In IE:

Also, you can unsubscribe from any event. In

Proper ways btn.removeEventListener(“click”, action); In IE: Also, you can unsubscribe from any
W3C:

btn.detachEvent(“onclick”, action);

Interesting note
Why we refer to W3C if JavaScript syntax is specified by ECMA? Because ECMA specifies only cross-platform part of language and does not describes any API. The browser API is determined by W3C standards. It applies to events, DOM, storages, etc.

[1]

[1]

Слайд 12

Bubbling and Capturing

The third parameter of addEventListener is a phase of event

Bubbling and Capturing The third parameter of addEventListener is a phase of
processing. There are 2 phases:
bubbling (if parameter is ‘false’)
capturing (if parameter is ‘true’).

W3C browsers supports both phases whereas in IE only bubbling is supported.






For example:
There are three nested elements like , and (

or something else). When event has occurred inside the element its processing starts from top of DOM - window and moves to the target element. After being processed in target element event will go back.

[1]

Слайд 13

Bubbling and Capturing

Bubbling

Capturing






[1]

[2]

[3]

Bubbling and Capturing Bubbling Capturing [1] [2] [3]

Слайд 14

Event object

For every event in the browser instance of Event object will

Event object For every event in the browser instance of Event object
be created.

You can take it if you need. In W3C browsers this object will be passed as a first parameter of event handler:

btn.addEventListener(“click”, action, false);

Where action was defined as:

function action (e) { . . . }

[1]

Слайд 15

Event object

Event object is supported in IE, too, but it’s located in

Event object Event object is supported in IE, too, but it’s located
object window and its name is event:

var e = window.event;

You have a possibility to use a cross-browser solution.:

function action (e) {
e = e || window.event;
. . .
}

[1]

[2]

Слайд 16

Control of Default behavior

Sometimes a default scenario of event processing includes some

Control of Default behavior Sometimes a default scenario of event processing includes
additional behavior: bubbling and capturing or displaying context menu.

If you don't need a default behavior, you can cancel it. Use object event and next methods for this purpose:

e.preventDefault();

e.stopPropagation();

for discarding bubbling and capturing.

for aborting default browser behavior.
.

[1]

[2]

Слайд 17

Memory and Sandbox

Memory and Sandbox

Слайд 18

Basic info

Free space in browser sandbox is allocated for each variable in

Basic info Free space in browser sandbox is allocated for each variable
JavaScript.
Sandbox is a special part of memory that will be managed by browser: JavaScript takes simplified and secure access to "memory“, browser translates JS commands and does all low-level work.
As a result memory, PC and user data has protection from downloaded JavaScript malware.

Слайд 19

Scope

The scope is a special JavaScript object which was created by browser

Scope The scope is a special JavaScript object which was created by
in the sandbox and used for storing variables.
Each function in JavaScript has its own personal scope. Scope is formed when a function is called and destroyed after the function finishes.
This behavior helps to manage local variables mechanism.
window object is a top-level scope for all default and global variables.

Слайд 20

Scope

window_scope = {
test: function,
a: 10,
b: 20
};

test_scope = {
b:

Scope window_scope = { test: function, a: 10, b: 20 }; test_scope
40
};

[1]

[2]

[3]

[41

var a = 10;
test();
function test () {
a = 30;
var b = 40;
}
var b = 20;
console.log(a, b);

Слайд 21

Value-types and Reference-types

Unfortunately some objects are too large for scope. For example

Value-types and Reference-types Unfortunately some objects are too large for scope. For
string or function. There is simple division into value-types and reference-types for this reason.
Value-types are stored in scope completely and for reference-types only reference to their location is put in scope. They themselves are located in place called "memory heap".
String and all Objects are reference-types. Other data types are stored in scope.

Слайд 22

Memory cleaning

The basic idea of memory cleaning: when function is finished, scope

Memory cleaning The basic idea of memory cleaning: when function is finished,
should be destroyed and as a result all local variables should be destroyed.
This will work for value-types.
As for reference-types: deleting the scope destroys only reference. The object in heap itself will be destroyed only when it becomes unreachable.

Слайд 23

Unreachable links

An object is considered unreachable if it is not referenced from

Unreachable links An object is considered unreachable if it is not referenced
the client area of code.
Garbage collector is responsible for the cleanup of unreachable objects.
It's a special utility that will launch automatically if there isn’t enough space in the sandbox.
If an object has at least one reference it is still reachable and will survive after memory cleaning.

Слайд 24

Unreachable links

action_scope = {
a: reference,
b: reference
};

… somewhere in heap …

function

Unreachable links action_scope = { a: reference, b: reference }; … somewhere
action () {
var a = new Point(10, 20),
b = new Point(15, 50);
}

{x: 10, y: 20}

{x: 15, y: 50}

[1]

[2]

[3]

Слайд 26

Closure

FYI: if scope is an object and it is not deleted it

Closure FYI: if scope is an object and it is not deleted
is still reachable, isn't it?
Absolutely! This mechanism is called closure.
If you save at least one reference to scope, all its content will survive after function finishing.

Слайд 27

Example

function getPi () {
var value = 3.14;
return function () {

Example function getPi () { var value = 3.14; return function ()
return value; };
}

var pi = getPi();
. . .
L = 2*pi()*R;

[1]

[3]

[2]

Имя файла: Java.-Script-in-Browser.pptx
Количество просмотров: 188
Количество скачиваний: 0