JavaScript
v
V8 för Chrome och Node.js. JS-motorn utvecklas av respektive webblÀsare, men ska följa EcmaScript-standard
KĂ€llkod
Maskinkod
Programmet körs
KĂ€llkod
Programmet körs
Kompilering
Exekvering
Exekveras rad för rad
KĂ€llkod
Maskinkod
Programmet körs
Kompilering
Exekvering sker direkt
Text
(sparas ej)
Javascript intepreteraren (eller JIT) tilldelar vÀrdet en datatyp vid runtime. En "10" blir en string och 10 blir ett Number. Och programmeraren kan sedan typomvandla vid behov.
Motsvarigheten heter statisk typning och dÀr mÄste programmeraren explicit ange datatyp som string, int, osv. SÄ Àr fallet i programmeringsprÄk som C++, C#, Java, etc
Text
Text
(i kursmÄlen refereras Web API som Browser API)
Ni har hunnit anvÀnda en del frÄn Web API.
DOM, fetch, Local Storage..
Sen finns det en hel del till:
Geolocation, Canvas, Fullscren, WebGL
Hur Javascriptmotorn hÄller reda pÄ hur funktionen anropas. Vilka funktioner som körs och vilka funktioner som vÀntar pÄ att köras o.s.v.
Callstack arbetar utifrÄn principen LIFO - last in first out.
NÀr en funktion anropas kommer den att lÀggas till call stack, nÀr den returnas kommer information om funktionen tas bort frÄn call stack.
function firstFunction(){
console.log("Hello from firstFunction");
}
function secondFunction(){
firstFunction();
console.log("The end from secondFunction");
}
secondFunction();
function multiply(x, y) {
return x * y;
}
function printSquare(x) {
var s = multiply(x, x);
console.log(s);
}
printSquare(5);
# CALL STACK
Om antalet exekveringar överskrider antal möjliga som kan finnas pÄ call stack resulteras det i stack overflow. Testa denna...
function fn() {
fn();
}
fn(); // stack overflow
Â
Â
let a = "hello";
function greet() {
let b = "World"
console.log(a + b);
}
greet();
console.log(a + b);
let a = "hello";
function greet () {
console.log(a);
}
greet(); // hello
Variabeln a Àr deklarerad i global scopet
let a = "hello";
function greet() {
let b = "World"
console.log(a + b);
}
greet();
console.log(a + b); // error
Variabeln b Àr deklarerad i ett block => Block Scope
function run() {
var foo = "Foo";
let bar = "Bar";
console.log(foo, bar); // Foo Bar
for(let i = 0; i < 5; i++) {
var moo = "Mooo"
let baz = "Bazz";
console.log(moo, baz); // Mooo Bazz
}
console.log(moo); // Mooo
console.log(baz); // ReferenceError
}
run();
let a = 'Hello';
function greet() {
// local variable
let b = 'World';
console.log(a + ' ' + b);
if (b == 'World') {
// block-scoped variable
let c = 'hello';
console.log(a + ' ' + b + ' ' + c);
}
// variable c cannot be accessed here
console.log(a + ' ' + b + ' ' + c);
}
greet();
# SCOPE
Leta efter variabler uppĂ„t âïžÂ
inte nerĂ„t đ
string
number
booelan
undefined
null
symbol
bigint
Object {}
Arrays
Funktioner
Klasser
Dates
...
egentligen allt annat representeras som ett objekt
Fundamentalt att förstÄ för att undvika buggar!