funktioner

funktioner

alle gør omtrent det samme med et par subtile forskelle:

Der skelnes mellem funktionsnavnet og den variabel, som funktionen er tildelt. Funktionsnavnet kan ikke ændres, mens den variabel, som funktionen er tildelt, kan tildeles igen. Funktionsnavnet kan kun bruges i funktionens krop. Forsøg på at bruge det uden for funktionens krop resulterer i en fejl (eller undefined, hvis funktionsnavnet tidligere blev erklæret via en var erklæring)., For eksempel:

var y = function x() {};alert(x); // throws an error

funktionsnavnet vises også, når funktionen serialiseres via Function‘s toString-metode.

på den anden side er variablen, som funktionen er tildelt, kun begrænset af dens omfang, hvilket garanteres at omfatte det omfang, hvor funktionen er erklæret.

som det 4.eksempel viser, kan funktionsnavnet være forskelligt fra den variabel, som funktionen er tildelt. De har ingen relation til hinanden. En funktion erklæring skaber også en variabel med samme navn som funktionen navn., I modsætning til dem, der er defineret af funktionsudtryk, kan funktioner defineret af funktionsdeklarationer tilgås af deres navn i det omfang, de blev defineret i:

en funktion defineret af ‘new Function' har ikke et funktionsnavn. I SpiderMonkey JavaScript-motoren viser den serialiserede form af funktionen imidlertid som om den har navnet”anonym”. For eksempel: alert(new Function()) kontakt:

function anonymous() {}

Da funktionen rent faktisk ikke har et navn, anonymous er ikke en variabel, der kan åbnes i funktion., For eksempel vil følgende resultere i en fejl:

var foo = new Function("alert(anonymous);");foo();

i modsætning til funktioner defineret af funktionsudtryk eller af Function konstruktør, kan en funktion defineret af en funktionsdeklaration bruges før selve funktionsdeklarationen. For eksempel:

foo(); // alerts FOO!function foo() { alert('FOO!');}

en funktion defineret af et funktionsudtryk eller af en funktionsdeklaration arver det aktuelle omfang. Det vil sige, at funktionen danner en lukning., På den anden side arver en funktion defineret af en Function constructor ikke noget andet omfang end det globale omfang (som alle funktioner arver).

funktioner defineret af funktionsudtryk og funktionsdeklarationer analyseres kun .n gang, mens de, der er defineret afFunction konstruktør, ikke er. Det vil sige, at funktionskropsstrengen, der sendes til Function konstruktøren, skal analyseres hver gang konstruktøren kaldes., Selvom et funktionsudtryk skaber en lukning hver gang, repareres funktionskroppen ikke, så funktionsudtryk er stadig hurtigere end “new Function(...)“. Derfor bør Function konstruktøren generelt undgås, når det er muligt.

det skal dog bemærkes, at funktionsudtryk og funktionsdeklarationer, der er indlejret i den funktion, der genereres ved at analysere en Function constructor ‘s streng, ikke analyseres gentagne gange. For eksempel:

en funktionsdeklaration er meget let (og ofte utilsigtet) omdannet til et funktionsudtryk., En funktion erklæring ophører med at være en, når det enten:

  • bliver en del af et udtryk
  • er ikke længere en “kilde element” af en funktion eller scriptet selv. Et “kildeelement” er en ikke-indlejret erklæring i scriptet eller en funktionskrop:

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *