„Javascript plus“ ženklas prieš funkcijos pavadinimą

Ieškojau informacijos apie savarankiško veikimo funkcijas, ir kažkur aš pasirodėu šis pavadinimas:

 +function(){} 

Ar kas nors man paaiškins, ką + ženklas prieš funkciją reiškia / daro?

785
12 нояб. nustatė jOpacic 12 nov. 2012-11-12 13:06 '12, 13:06 2012-11-12 13:06
@ 3 atsakymai

Dėl to analizatorius apdoroja dalį po + kaip išraišką. Paprastai tai naudojama funkcijoms, kurios vadinamos nedelsiant, pavyzdžiui:

 +function() { console.log("Foo!"); }(); 

Be + , jei analizatorius yra toje būsenoje, kurioje operatorius tikisi (kuris gali būti išraiška arba keli operatoriai be išraiškos), žodžio function atrodo kaip funkcijų deklaracijos pradžia, o tai, kas yra funkcijos išraiška, ir todėl () , kita (tai) viršutinės eilutės pabaigoje) bus sintaksės klaida (pvz., pavadinimo trūkumas šiame pavyzdyje). Naudojant + tai atliekama su funkcijų išraiška, o tai reiškia, kad pavadinimas yra neprivalomas ir dėl to atsiranda nuoroda į funkciją, kurią galima pavadinti, todėl skliausteliai galioja.

+ - tai tik viena iš parinkčių. Tai taip pat gali būti ! , ~ arba beveik bet kuris kitas unarusis operatorius. Arba galite naudoti skliaustelius (tai dažniau, bet ne daugiau ar mažiau teisingai sintaksiškai):

 (function() { console.log("Foo!"); })(); // or (function() { console.log("Foo!"); }()); 
1235
12 нояб. Atsakymą pateikia TJ Crowder lapkričio 12 d 2012-11-12 13:07 '12, 13:07 2012-11-12 13:07

Vaiko sistema atsakymui @TJCrowder, + paprastai naudojama skaičiuoti vertę, kaip paaiškinta SO . Tokiu atveju jis vadinamas „unary plus“ (ieškant patogumo).

 var num = +variant; 
border=0

Taigi, prieš funkciją, tai gali būti būdas priversti funkcijos rezultatą aiškinti kaip skaičių. Abejoju, kad tai atsitiks dar kartą, tačiau teoriškai JIT gali naudoti šią funkciją kaip funkciją su skaitmenine verte ir pan. Tačiau norint užkirsti kelią vienareikšmiam pliusui, kuris yra susietas, kai naudojamas didesniais terminais, jums reikia skliaustų:

 blah + (+(function(){ var scope; return "4"; })()); 
85
12 нояб. Atsakymą pateikė Phil H lapkričio 12 d. 2012-11-12 13:54 '12, 13:54, 2012-11-12 13:54

Taigi trumpas atsakymas yra tas, kad jis neleidžia sintaksės klaidai naudoti šią funkciją.

Taip pat galite nurodyti varikliui, kad net nesate suinteresuotas grąžinimo verte, naudodami tuščią operatorių:

 void function() { console.log("Foo!"); }(); 

Žinoma, šio tikslo naudojimas taip pat yra naudingas.

49
16 нояб. Atsakymą pateikė Ja͢ck lapkričio 16 d. 2012-11-16 19:45 '12, 07:45 pm 2012-11-16 19:45

Kiti klausimai apie „ žymų arba Užduoti klausimą