Pagina 1 van 1
javascript: lambda functies
Geplaatst: 15 feb 2018, 21:14
door brubbel
Code: Selecteer alles
var onChange = () => this._onChange.bind(this)();
var onChange = function() {
this._onChange();
}.bind(this);
var onChange = this._onChange.bind(this);
Variable onChange wordt aan een button gekoppeld, dit terzijde.
onChange() werkt in de eerste 2 gevallen wel, in het laatste geval niet. Waarom juist?
Edit: dit lijkt belangrijk
Origineel is:
Later wordt deze dynamisch opnieuw toegewezen:
In het niet-werkende geval eindig ik dus met:
In de werkende gevallen zal de lambda functie de correcte
myNewOnChange() aanroepen.
Thanks!
Re: javascript: lambda functies
Geplaatst: 15 feb 2018, 22:04
door cptKangaroo
Misschien gelijkaardig aan dit:
https://stackoverflow.com/questions/336 ... nctionname
(volg de
hoisting link in het eerste antwoord). (Gokje)
Re: javascript: lambda functies
Geplaatst: 16 feb 2018, 08:51
door JamesEarlGray
De eerste twee toewijzingen aan de variable onChange, wijs je een functie toe aan die variabele. Dat kan je doen in Javascript; een functie verpakken in een variabele.
De derde keer wijs je puur de return-waarde toe aan die variabele, dus werkt die variabele uiteraard niet als functie, omdat er geen functie maar enkel een waarde in zit.
Re: javascript: lambda functies
Geplaatst: 16 feb 2018, 11:24
door brubbel
Ik denk dat in het laatste geval de Function.prototype wel degelijk wordt aangeroepen. Mocht onChange een return value bevatten, zou er een TypeError: onChange is not a function moeten ge-raised worden bij de onChange() call, wat niet het geval is.
Corrigeer mij als dat niet zo is.
Mijn verwarring ontstaat -denk ik- doordat de this in javascript afhankelijk is van de scope, terwijl dat niet is bij c++ of self in python. Bijgevolg moet ik het this argument bind()-en aan de huidige scope, wat ervoor zorgt dat er een nieuwe functie wordt gegenereerd die onafhankelijk is van this._onChange.
En ik heb als beginner weer iets nieuw geleerd: hoisting!