Neo-IT



Week: 26
Uw ip adres is: 54.81.197.24

Javascript

Snelheid van een for loop verbeteren
for(var i=0;i array.length opslaan in een variabele maakt het script sneller omdat je anders de lengte telkens moet opzoeken, dus:
aLengte = array.length;
for(var i=0;i>aLength;i++){};


Pure functie
Terugkeer waarde is alleen afhankelijk van de parameters

Tijdelijke variabelen : var binnen een functie

var : met var declareer je een variabele binnen een bepaalde scope, zonder var is deze globaal. programmeer aanwijzing hierbij is dat je altijd een variabele met var declareert.

Side-effect: als de waarde van een globale variabele wordt aangepast in een functie, spreek je van een side-effect

window (omgeving): de globale omgeving waarbinnen we werken, waar je dus ook de globale var='x' kunt declareren o.a.

Lexical scoping: de manier waarop de scope van variabelen werkt.

Execution stack of stack: als tijdens de uitvoering van een programma een functie wordt aangeroepen, wordt de omgeving ven het programma met de regel waar het programma gebleven is vastgelegd, 
zodat het programma na afloop van de functie weer vervolgd wordt. Zo kan een functie A ook weer een andere functie B aanroepen waarbij de omgeving functie A wordt vastgelegd, voordat functie B wordt uitgevoerd.
Nadat functie B is uitgevoerd gaat functie A op dat opgeslagen punt weer verder. Dit verloopt dus volgens het LIFO principe.

Closure: een functie met bijbehorende omgeving van lokale variabelen. De variabelen en hun waarden blijven bestaan na afloop van de aanroep van de functie, doordat een functie die aan deze variabelen refereert ter beschikking blijft (doordat de functie als terugkeerwaarde is gegeven)
function getFunction(x){
  return function HoogOp(){
    x++;
    return x;
  }
}
var f = getFunction(3);
f();

We zien dat zelf de waarde van de parameter x die weer als lokale variabele gebruikt wordt bewaard blijft. Je kunt x niet rechtstreeks benaderen.
Met een closure kunnen we dus information hiding toepassen en op deze wijze private variabelen realiseren.
Nog een voorbeeld, dit is een teller. Die kun je ook met een globale variabele maken, maar dit is stukken netter.
var bij = (function(){
   var teller=0;
   return function (){
      console.log(teller++);
   }
})()


Hoisting (letterlijk: hijsen) : Een variabele of functie kan worden gebruikt voor dat deze is gedeclareerd.
Dit geldt alleen voor declaraties en niet voor het initialiseren (initieel een waarde toekennen)
Als je netjes de variabelen declareert aan het begin van de script kun je fouten hiermee voorkomen.

Variabele variabele naam
variabele = eval("eenTest" + parseInt(Math.random()*10))
window['variabelenaam'+variabele] = "Variabele variabele";

Enkele soorten functies
Functie expressie met naam : var foo = function bar() { ... }
Anonieme functie expressie  : var foo = function() { ... }
bij functie expressies treedt geen hoisting op.

Handige functies: typeof(), isNaN()..

OR in Javascript
De || kijkt eerst aan de linkerkant van de value, indien true geeft hij de value, anders de rechterkant.
Bv. var c = bbb || aaa;// als bbb false is krijgt c de waarde van aaa
Ook bij functies werkt dit op deze manier, ook met de || is de eerste conditie true dan kan er nog zoveel onzin aan de andere kant van || staan maar dan is de test true en wordt de functie uitgevoerd.

Een interne functie uitvoeren, een manier:
function isWortel(g){
  return function(n){
    return n * n === g;
  }
}
var wortels = isWortel(16);
wortels(4);


Direct aangeroepen functie -> kan met functie expressie mits deze tussen haakjes staat
deze functie kan anoniem zijn: 
(function(){
  alert(0);
})();


Functie objecten in Javascript zijn 'first class'
Ze kunnen aldus gebruikt worden als:
-als parameter in een (andere) functie
-als terugkeerparameter van een functie
-om toe te kennen aan een variabele
-om opgeslagen te worden in een object of array

Aan functies kun je ook functies en/of array's meegeven als parameter, voorbeeld:
function toepassen(lijst, functie){
    var resultaat=[];
    for(var i=0;i <lijst.length; i++){
        resultaat.push(functie(lijst[i]));
    } 
    return resultaat;
}

function dubbel(woord){
    return woord + woord + woord;
}

var dieren = ['aap','geit','hond','kat','koe'];

toepassen(dieren,dubbel)
>>["aapaapaap", "geitgeitgeit", "hondhondhond", "katkatkat", "koekoekoe"]

toepassen(dieren,dubbel)[0]
>>"aapaapaap"


Objecten

Properties benaderen kan op 2 manieren
-1. Door de naam als string tussen blokhaken te zetten:  ['naam']
-2. Door de punt notatie

Literal objects, bijvoorbeeld: var literalOjbject = {waarde:"testwaarde", waarde2:"nogeentestwaarde"}

Alias: als twee variabelen naar hetzelfde object verwijzen.


Array

Array maken twee manieren:
Literal:  var aapArray = ["chimp","gorilla","brilaap"];
Of met behulp van een constructor functie: var aapArray = new Array(20);
Tweedimensionale array:
var bord = [
  ["X","O ", " "],
  ["X","O ", " "],
  ["O","X ", " "],
];
bord[0][1]; //--> "O "