Wat is de betekenis van “=>” (een pijl gevormd uit is gelijk aan & groter dan) in JavaScript?

Ik weet dat de operator >=meer dan of gelijk aan betekent, maar ik heb =>in een broncode gezien. Wat is de betekenis van die operator?

Hier is de code:

promiseTargetFile(fpParams, aSkipPrompt, relatedURI).then(aDialogAccepted => {
    if (!aDialogAccepted)
        return;
    saveAsType = fpParams.saveAsType;
    file = fpParams.file;
    continueSave();
}).then(null, Components.utils.reportError);

Antwoord 1, autoriteit 100%

Wat het is

Dit is een pijlfunctie.Pijlfuncties zijn een korte syntaxis, geïntroduceerd door ECMAscript 6, die op dezelfde manier kan worden gebruikt als functie-expressies. Met andere woorden, je kunt ze vaak gebruiken in plaats van uitdrukkingen zoals function (foo) {...}. Maar ze hebben enkele belangrijke verschillen. Ze binden bijvoorbeeld hun eigen waarden van thisniet (zie hieronder voor bespreking).

Pijlfuncties maken deel uit van de ECMAscript 6-specificatie. Ze worden nog niet in alle browsers ondersteund, maar ze worden wel gedeeltelijk of volledig ondersteund in Node v. 4.0+ en in de meeste moderne browsers die vanaf 2018 in gebruik zijn (ik heb hieronder een gedeeltelijke lijst met ondersteunde browsers toegevoegd).

U kunt meer lezen in de Mozilla-documentatieop pijlfuncties.

Uit de Mozilla-documentatie:

Een expressie van een pijlfunctie (ook bekend als een dikke pijlfunctie) heeft een kortere syntaxis in vergelijking met functie-uitdrukkingenen bindt lexicaal de thiswaarde (bindt niet aan zijn eigen this, arguments, super, of new.target). Pijlfuncties zijn altijd anoniem. Deze functie-uitdrukkingen zijn het meest geschikt voor niet-methodefuncties en kunnen niet als constructors worden gebruikt.

Een opmerking over hoe thiswerkt in pijlfuncties

Een van de handigste kenmerken van een pijlfunctie is begraven in de bovenstaande tekst:

Een pijlfunctie… bindt lexicaal de thiswaarde (bindt niet zijn eigen this…)

Wat dit in eenvoudiger bewoordingen betekent, is dat de pijlfunctie de waarde thisuit zijn context behoudt en geen eigen thisheeft. Een traditionele functie kanzijn eigen thiswaarde binden, afhankelijk van hoe deze is gedefinieerd en aangeroepen. Dit kan veel gymnastiek vereisen, zoals self = this;, enz., om thiste openen of te manipuleren vanuit de ene functie in een andere functie. Voor meer informatie over dit onderwerp, zie de uitleg en voorbeelden in de Mozilla-documentatie.

Voorbeeldcode

Voorbeeld (ook uit de documenten):

var a = [
  "We're up all night 'til the sun",
  "We're up all night to get some",
  "We're up all night for good fun",
  "We're up all night to get lucky"
];
// These two assignments are equivalent:
// Old-school:
var a2 = a.map(function(s){ return s.length });
// ECMAscript 6 using arrow functions
var a3 = a.map( s => s.length );
// both a2 and a3 will be equal to [31, 30, 31, 31]

Opmerkingen over compatibiliteit

Je kunt pijlfuncties gebruiken in Node, maar browserondersteuning is slordig.

Browserondersteuning voor deze functionaliteit is behoorlijk verbeterd, maar is nog steeds niet wijdverbreid genoeg voor de meeste browsergebaseerde toepassingen. Vanaf 12 december 2017 wordt het ondersteund in de huidige versies van:

  • Chrome (v. 45+)
  • Firefox (v. 22+)
  • Edge (v. 12+)
  • Opera (v. 32+)
  • Android-browser (v. 47+)
  • Opera Mobile (v. 33+)
  • Chrome voor Android (v. 47+)
  • Firefox voor Android (v. 44+)
  • Safari (v. 10+)
  • iOS Safari (v. 10.2+)
  • Samsung Internet (v. 5+)
  • BAIDU BROWSER (V. 7.12 +)

Niet ondersteund in:

  • dwz (door v. 11)
  • opera mini (via v. 8.0)
  • BlackBerry-browser (via v. 10)
  • ie mobiel (via v. 11)
  • UC-browser voor Android (via v. 11.4)
  • QQ (via v. 1.2)

U kunt meer (en meer huidige) informatie vinden op caniuse.com (geen aansluiting ).


2, Autoriteit 14%

Dat staat bekend als een pijlfunctie, onderdeel van de Ecmascript 2015 spec

var foo = ['a', 'ab', 'abc'];
var bar = foo.map(f => f.length);
console.log(bar); // 1,2,3

3, Autoriteit 5%

Dit zijn pijlfuncties

Ook bekend als dikke pijlfuncties . Ze zijn een schone en aandacht voor het schrijven van functieuitdrukkingen, b.v. function() {}.

Pijlfuncties kunnen de behoefte van function, returnen {}retourneren bij het definiëren van functies. Het zijn one-liners, vergelijkbaar met Lambda Expressions in Java of Python.

Voorbeeld zonder parameters

const queue = ['Dave', 'Sarah', 'Sharon'];
const nextCustomer = () => queue[0];
console.log(nextCustomer()); // 'Dave'

4, Autoriteit 4%

Dit zou de “pijlfunctie-uitdrukking” zijn die in ECMAScript 6 is geïntroduceerd.

https://developer.mozilla.org/en- VS/docs/Web/JavaScript/Reference/arrow_functions

Voor historische doeleinden (als de wikipagina later verandert), is dit:

Een pijlfunctie-uitdrukking heeft een kortere syntaxis in vergelijking met functie-uitdrukkingen en bindt de this-waarde lexicaal. Pijlfuncties zijn altijd anoniem.


Antwoord 5, autoriteit 4%

om nog een voorbeeld toe te voegen van wat een lambda kan doen zonder kaart te gebruiken:

a = 10
b = 2
var mixed = (a,b) => a * b; 
// OR
var mixed = (a,b) => { (any logic); return a * b };
console.log(mixed(a,b)) 
// 20

Antwoord 6, autoriteit 2%

Zoals anderen al hebben gezegd, is het een nieuwe syntaxis om functies te maken.

Dit soort functies verschillen echter van normale:

  • Ze binden de waarde this. Zoals uitgelegd door de spec,

    Een ArrowFunctiondefinieert geen lokale bindingen voor arguments,
    super, thisof new.target. Elke verwijzing naar arguments,
    super, thisof new.targetbinnen een ArrowFunctionmoet
    oplossen naar een binding in een lexicaal omsluitende omgeving. Typisch
    dit wordt de functie-omgeving van een onmiddellijk omsluitende
    functie.

    Ook al kan een ArrowFunctionverwijzingen naar superbevatten, de
    Functieobject gemaakt in stap 4 is niet gemaakt in een methode door
    makeemethod . Een arrowcten die referenties super
    is altijd ingesloten in een niet-arrowcten en het noodzakelijke
    Staat om te implementeren superis toegankelijk via de Scope dat is
    vastgelegd door het functie-object van de arrowctionen .

  • Zij zijn niet-constructeurs.

    Dat betekent dat ze geen [[construct]] interne methode hebben en dus niet kan worden geïnstantieerd, b.g.

    var f = a => a;
    f(123);  // 123
    new f(); // TypeError: f is not a constructor
    

7

Ik heb gelezen, dit is een symbool van Arrow Functionsin ES6

Dit

var a2 = a.map(function(s){ return s.length });

Gebruik Arrow FunctionKan worden geschreven als

var a3 = a.map( s => s.length );

MDN DOCS


Antwoord 8

Eenvoudig CRUD-voorbeeld toevoegen met Pijlfunctie

//Arrow Function
 var customers   = [
   {
     name: 'Dave',
     contact:'9192631770'
   },
   {
     name: 'Sarah',
     contact:'9192631770'
   },
   {
     name: 'Akhil',
     contact:'9928462656' 
   }],
// No Param READ
 getFirstCustomer = () => { 
   console.log(this);
   return customers[0];
 };
  console.log("First Customer "+JSON.stringify(getFirstCustomer())); // 'Dave' 
   //1 Param SEARCH
  getNthCustomer = index=>{
    if( index>customers.length)
    {
     return  "No such thing";
   }
   else{
       return customers[index];
     } 
  };
  console.log("Nth Customer is " +JSON.stringify(getNthCustomer(1))); 
   //2params ADD
  addCustomer = (name, contact)=> customers.push({
     'name': name,
     'contact':contact
    });
  addCustomer('Hitesh','8888813275');
  console.log("Added Customer "+JSON.stringify(customers)); 
  //2 param UPDATE
  updateCustomerName = (index, newName)=>{customers[index].name= newName};
  updateCustomerName(customers.length-1,"HiteshSahu");
  console.log("Updated Customer "+JSON.stringify(customers));
  //1 param DELETE
  removeCustomer = (customerToRemove) => customers.pop(customerToRemove);
  removeCustomer(getFirstCustomer());
  console.log("Removed Customer "+JSON.stringify(customers)); 

Antwoord 9

Pijlfuncties die worden aangegeven met een symbool (=>) helpen u bij het maken van anonieme functies en methoden. Dat leidt tot een kortere syntaxis. Hieronder is bijvoorbeeld een eenvoudige functie “Toevoegen” die de optelling van twee getallen retourneert.

function Add(num1 , num2 ){
return num1 + num2;
}

De bovenstaande functie wordt korter door de syntaxis van de “Pijl” te gebruiken, zoals hieronder weergegeven.

Bovenstaande code bestaat uit twee delen zoals weergegeven in het bovenstaande diagram: –

Invoer: — Deze sectie specificeert de invoerparameters voor de anonieme functie.

Logica: — Deze sectie komt na het symbool “=>”. Deze sectie heeft de logica van de eigenlijke functie.

Veel ontwikkelaars denken dat de pijlfunctie je syntaxis korter en eenvoudiger maakt en dus je code leesbaar maakt.

Als je de bovenstaande zin gelooft, laat me je verzekeren dat het een mythe is. Als je een moment denkt dat een correct geschreven functie met naam veel leesbaar is dan cryptische functies die in één regel worden gemaakt met behulp van een pijlsymbool.

Het hoofdgebruik van de pijlfunctie is om ervoor te zorgen dat code wordt uitgevoerd in de
bellers context.

Zie de onderstaande code waarin een globale variabele “context” gedefinieerd is, deze globale variabele is toegankelijk binnen een functie “eenothermethod” die wordt genoemd van andere methode “SOMEMETHOD”.

Deze “SOMEMETHOD” heeft lokale “context” -variabele. Nu omdat “Syothermethod” wordt genoemd van “” SOMEMETHOD “, verwachten we dat het” Lokale context “weergeven, maar het weergeeft” Global Context “.

var context = “global context”;
function SomeOtherMethod(){
alert(this.context);
}
function SomeMethod(){
this.context = “local context”;
SomeOtherMethod();
}
var instance = new SomeMethod();

Maar als u de oproep vervangt door de pijl-functie te gebruiken, wordt het “Lokale context” weergegeven.

var context = "global context";
    function SomeMethod(){
        this.context = "local context";
        SomeOtherMethod = () => {
            alert(this.context);
        }
        SomeOtherMethod();
    }
    var instance = new SomeMethod();

Ik zou u aanmoedigen om deze link te lezen (pijl-functie in Javascript ) die alle scenario’s van JavaScript-context uitleggen en waarin scenario’s de context van de bellers niet worden nageleefd.

Je kunt ook de demonstratie van pijlfunctie met javascript bekijken in deze YouTube-videowat praktisch de term Context demonstreert.


Antwoord 10

Zoals alle andere antwoorden al hebben gezegd, maakt het deel uit van de syntaxis van de pijlfunctie van ES2015. Meer specifiek, het is geen operator, het is een token met leestekens dat de parameters van de body scheidt: ArrowFunction : ArrowParameters => ConciseBody. bijv. (params) => { /* body */ }.


Antwoord 11

Zoals anderen al hebben aangegeven, gebruiken reguliere (traditionele) functies thisvan het object dat de functie heeft aangeroepen, (bijvoorbeeld een knop waarop is geklikt). In plaats daarvan gebruiken pijlfuncties thisvan het object dat de functie definieert.

Beschouw twee bijna identieke functies:

regular = function() {
  ' Identical Part Here;
}
arrow = () => {
  ' Identical Part Here;
}

Het onderstaande fragment laat het fundamentele verschil zien tussen wat thisvoor elke functie vertegenwoordigt. De gewone functievoert [object HTMLButtonElement]uit terwijl de pijlfunctie[object Window].

<html>
 <button id="btn1">Regular: `this` comes from "this button"</button>
 <br><br>
 <button id="btn2">Arrow: `this` comes from object that defines the function</button>
 <p id="res"/>
 <script>
  regular = function() {
    document.getElementById("res").innerHTML = this;
  }
  arrow = () => {
    document.getElementById("res").innerHTML = this;
  }
  document.getElementById("btn1").addEventListener("click", regular);
  document.getElementById("btn2").addEventListener("click", arrow);
 </script>
</html>

12

ES6Pijlfuncties:

In JavaScript is de =>het symbool van een pijl-functie-expressie. Een pijl-functie-expressie heeft geen eigen thisbinding en kan daarom niet worden gebruikt als een constructormunctie. Bijvoorbeeld:

var words = 'hi from outside object';
let obj = {
  words: 'hi from inside object',
  talk1: () => {console.log(this.words)},
  talk2: function () {console.log(this.words)}
}
obj.talk1();  // doesn't have its own this binding, this === window
obj.talk2();  // does have its own this binding, this is obj

13

JavaScript-pijlfuncties zijn ongeveer het equivalent van Lambda-functies in Python of blokken in Ruby. Dit zijn anonieme functies met hun eigen speciale syntaxis en werken in de context van hun omsluitende scope . Dit betekent dat ze niet hun eigen “dit” hebben, maar in plaats daarvan toegang krijgen tot die van de onmiddellijke omsluitende functie.

Vanaf de ECMA-standaard :

Een arrow-functie definieert geen lokale bindingen voor argumenten ,
super, ditof new.target. Elke verwijzing naar argumenten, super, this of new.target binnen een ArrowFunction moet resulteren in a
binding in een lexicaal omsluitende omgeving. Meestal zal dit zijn
de functie-omgeving van een direct omsluitende functie.

Vaak kun je lezen “een pijlfunctie-uitdrukking is een compact alternatief voor een traditionele functie-uitdrukking”, dit is niet correct. Pijlfunctie is GEEN afkorting voor traditionele functie, ze gedragen zich anders dan traditionele functies.

Syntaxis

// Traditional Function
// Create their own scope inside the function
function (a){
  return a + 100;
}
// Arrow Function 
// Do NOT create their own scope
// (Each step along the way is a valid "arrow function")
// 1. Remove the word "function" and place arrow between the argument and opening body bracket
(a) => {
  return a + 100;
}
// 2. Remove the body braces and word "return" -- the return is implied.
(a) => a + 100;
// 3. Remove the argument parentheses (only valid with exactly one argument)
a => a + 100;

Other episodes