javascript: lambda functies

brubbel
Premium Member
Premium Member
Berichten: 738
Lid geworden op: 04 Jul 2012
Bedankt: 155 keer
Uitgedeelde bedankjes: 42 keer

javascript: lambda functies

Berichtdoor brubbel » 15 Feb 2018, 21:14

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:

Code: Selecteer alles

this._onChange = Function.prototype;

Later wordt deze dynamisch opnieuw toegewezen:

Code: Selecteer alles

this._onChange = function myNewOnChange() {...};


In het niet-werkende geval eindig ik dus met:

Code: Selecteer alles

var onChange = Function.prototype.bind(this);

In de werkende gevallen zal de lambda functie de correcte myNewOnChange() aanroepen.

Thanks!

Gebruikersavatar
cptKangaroo
Elite Poster
Elite Poster
Berichten: 2241
Lid geworden op: 18 Dec 2004
Locatie: 053 Aalst
Bedankt: 146 keer
Uitgedeelde bedankjes: 415 keer

Re: javascript: lambda functies

Berichtdoor cptKangaroo » 15 Feb 2018, 22:04

Misschien gelijkaardig aan dit: https://stackoverflow.com/questions/336 ... nctionname
(volg de hoisting link in het eerste antwoord). (Gokje)

Gebruikersavatar
JamesEarlGray
Premium Member
Premium Member
Berichten: 459
Lid geworden op: 24 Aug 2017
Bedankt: 35 keer
Uitgedeelde bedankjes: 13 keer

Re: javascript: lambda functies

Berichtdoor JamesEarlGray » 16 Feb 2018, 08:51

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.

brubbel
Premium Member
Premium Member
Berichten: 738
Lid geworden op: 04 Jul 2012
Bedankt: 155 keer
Uitgedeelde bedankjes: 42 keer

Re: javascript: lambda functies

Berichtdoor brubbel » 16 Feb 2018, 11:24

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!


Terug naar “Web-en applicatie-ontwikkeling”

Wie is er online

Gebruikers op dit forum: Geen geregistreerde gebruikers en 1 gast