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 this
niet (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
this
waarde (bindt niet aan zijn eigenthis
,arguments
,super
, ofnew.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 this
werkt in pijlfuncties
Een van de handigste kenmerken van een pijlfunctie is begraven in de bovenstaande tekst:
Een pijlfunctie… bindt lexicaal de
this
waarde (bindt niet zijn eigenthis
…)
Wat dit in eenvoudiger bewoordingen betekent, is dat de pijlfunctie de waarde this
uit zijn context behoudt en geen eigen this
heeft. Een traditionele functie kanzijn eigen this
waarde binden, afhankelijk van hoe deze is gedefinieerd en aangeroepen. Dit kan veel gymnastiek vereisen, zoals self = this;
, enz., om this
te 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
, return
en {}
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
,this
ofnew.target
. Elke verwijzing naararguments
,
super
,this
ofnew.target
binnen 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
super
bevatten, de
Functieobject gemaakt in stap 4 is niet gemaakt in een methode door
makeemethod . Een arrowcten die referentiessuper
is altijd ingesloten in een niet-arrowcten en het noodzakelijke
Staat om te implementerensuper
is 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 Functions
in ES6
Dit
var a2 = a.map(function(s){ return s.length });
Gebruik Arrow Function
Kan worden geschreven als
var a3 = a.map( s => s.length );
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 this
van het object dat de functie heeft aangeroepen, (bijvoorbeeld een knop waarop is geklikt). In plaats daarvan gebruiken pijlfuncties this
van 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 this
voor 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
ES6
Pijlfuncties:
In JavaScript is de =>
het symbool van een pijl-functie-expressie. Een pijl-functie-expressie heeft geen eigen this
binding 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;