Beste lezers,
Ik ben bezig om Object georiënteerd Javascript te leren. Ik gebruik daarvoor Object Oriented JavaScript i.c.m. wat er zoal op internet te vinden is. Nu ben ik aan het stoeien met de scopechain en closures. Op internet kwam ik de volgende uitleg tegen:
http://http://javascript.info/tutorial/closures
In het kader van de scopechain worden er twee voorbeeldjes genoemd. Ze worden in de uitleg als 'redelijk vanzelfsprekend beschouwd' Toch begrijp ik er weinig van. Het eerste voorbeeld:
Hier zit ik met het volgende probleem:
Voor zover ik weet wordt een return-waarde (in dit geval een anonieme functie) altijd teruggegeven aan het aanroepende statement. In dit geval is het aanroepende statement de halve parameter (sum(1)) van de functie Alert(). Het tweede deel van de Alert-parameter (2) is de input voor de binnenste functie. De vraag is: hoe weet de interpreter dat deze (2) dient als aanroep (en input) voor de binnenste functie?
Het tweede voorbeeld is een uitbreiding op het eerste:
Van dit tweede voorbeeld begrijp ik helemaal niets meer. Zou iemand deze functie uit kunnen leggen? inclusief scopechain-principe en waarom het in vredesnaam mogelijk is om uiteindelijk zoveel getallen bij elkaar op te tellen als je zelf wilt?
Groet,
Anton
Ik ben bezig om Object georiënteerd Javascript te leren. Ik gebruik daarvoor Object Oriented JavaScript i.c.m. wat er zoal op internet te vinden is. Nu ben ik aan het stoeien met de scopechain en closures. Op internet kwam ik de volgende uitleg tegen:
http://http://javascript.info/tutorial/closures
In het kader van de scopechain worden er twee voorbeeldjes genoemd. Ze worden in de uitleg als 'redelijk vanzelfsprekend beschouwd' Toch begrijp ik er weinig van. Het eerste voorbeeld:
Code:
function sum(a) {
return function(b) { // takes a from outer LexicalEnvironment
return a+b
}
}
alert( sum(1)(2) )
Hier zit ik met het volgende probleem:
Voor zover ik weet wordt een return-waarde (in dit geval een anonieme functie) altijd teruggegeven aan het aanroepende statement. In dit geval is het aanroepende statement de halve parameter (sum(1)) van de functie Alert(). Het tweede deel van de Alert-parameter (2) is de input voor de binnenste functie. De vraag is: hoe weet de interpreter dat deze (2) dient als aanroep (en input) voor de binnenste functie?
Het tweede voorbeeld is een uitbreiding op het eerste:
Code:
function sum(a) {
var sum = a
function f(b) {
sum += b
return f
}
f.toString = function() { return sum }
return f
}
alert( sum(1)(2) ) // 3
alert( sum(5)(-1)(2) ) // 6
alert( sum(6)(-1)(-2)(-3) ) // 0
alert( sum(0)(1)(2)(3)(4)(5) ) // 15
Van dit tweede voorbeeld begrijp ik helemaal niets meer. Zou iemand deze functie uit kunnen leggen? inclusief scopechain-principe en waarom het in vredesnaam mogelijk is om uiteindelijk zoveel getallen bij elkaar op te tellen als je zelf wilt?
Groet,
Anton