2015-12-09 13 views
9

Ho sempre imparato che per dichiarare una funzione in javascript si dovrebbe fare qualcosa di simile:Qual è il modo più efficace per dichiarare le funzioni in Javascript?

function myfunction(fruit){ 
    alert('I like ' + fruit + '!'); 
} 

o qualcosa di simile:

var myfunction = function(fruit){ 
    alert('I like ' + fruit + '!'); 
}; 

Tuttavia, più di recente, ho notato che alcune persone effettivamente definiscono funziona come costanti:

const myfunction = fruit=> alert('I like ' + fruit + '!'); 

o anche utilizzando la parola let:

let myfunction = fruit=> alert('I like ' + fruit + '!'); 

A questo punto sono abbastanza confuso.

  • Perché così tanti modi di definire le funzioni?
  • Quando/dove dovrei usare ciascuno?
  • Quale modo è più efficiente?
+3

Circa l'efficienza, non penso che questo potrebbe mai essere un collo di bottiglia –

+0

Allora perché così tanti modi? Deve esserci un vantaggio nel farlo in modo diverso giusto? Non è come se gli sviluppatori creassero solo cose da fare per loro: D –

risposta

9

Penso che dipenderà dalle vostre esigenze. Ad esempio

questa definirà la funzione con myfunction nome sulla portata locale

function myfunction(fruit){ 
    alert('I like ' + fruit + '!'); 
} 

invece, il codice seguente definisce una variabile chiamato myfunction che punta a una funzione annonimous interni del locale scopo.

var myfunction = function(fruit){ 
    alert('I like ' + fruit + '!'); 
}; 

mentre il codice di seguito definisce un arrow function of ECMA6 che non sono supportati da tutti i browser alla data corrente. Inoltre, l'istruzione let dichiara una variabile locale dell'ambito del blocco, eventualmente inizializzandola su un valore. Pertanto la variabile myfunction non verrà visualizzata dopo la chiusura del blocco di codice.

let myfunction = fruit=> alert('I like ' + fruit + '!'); 

let permette di dichiarare le variabili che sono di portata limitata al blocco, dichiarazione o espressione su cui viene utilizzato. Si può leggere di più e vedere un po 'examples here

Come la documentazione oficial dice:

La dichiarazione const crea un riferimento di sola lettura per un valore. È non significa che il valore che detiene è immutabile, solo che l'identificatore della variabile non può essere riassegnato.

const myfunction = fruit=> alert('I like ' + fruit + '!'); 

Quindi, se si tenta di riassegnare myfunction fallirà (in silenzio) (ma non manca in Safari)

// this will fail silently in Firefox and Chrome 
myfunction = fruit=> alert('No! I DO NOT like ' + fruit + '!'); 

Chi let e const somiglianze il riferimento MDN dice che

Le costanti hanno un ambito di blocco, proprio come le variabili definite utilizzando l'istruzione let . Il valore di una costante non può essere modificato tramite la riassegnazione di e non può essere riprogrammato.

Così, come Aurelio de Rosa says,

costanti condividono una caratteristica con le variabili dichiarate utilizzando lasciano entrare che sono block-ambito posto di funzione con ambito

Leggi di più riguardo consthere

+2

che dire di 'const'? C'è qualche differenza tra 'const' e' let'? –

+0

Scriverò tra un momento =) – thiagoh

+0

"* fallirà silenziosamente *" - non dovrebbe. Prova a utilizzare la modalità rigorosa. In modalità sciatta, i browser hanno implementato tutti i tipi di compatibilità legacy, inclusa l'assegnabilità. – Bergi

1

L'utilizzo di const fa sì che la variabile di funzione (o costante in questo caso) non possa essere nuovamente assegnata a qualcos'altro. Quindi la funzione non può essere modificata.

L'utilizzo di let limita l'ambito della funzione al blocco in cui è stato definito, rispetto a var che limita l'ambito della funzione al contesto di esecuzione. Come definito MDN:

L'ambito di una variabile dichiarata con var è il contesto di esecuzione corrente, che è sia la funzione che contiene o, per le variabili dichiarate fuori qualsiasi funzione, globale.

Ad esempio, l'utilizzo di let all'interno di un ciclo for limiterebbe tale variabile al ciclo for.

Per quanto riguarda l'efficienza, non vedo come nessuno di questi possa influire sulle prestazioni, ma potrebbero esserci delle sfumature di cui non sono a conoscenza. Dubito che qualcuno possa mai notare differenze evidenti nelle prestazioni.

1

const

  • offre invece una lettura unico riferimento per la variabile funzione, si può vedere come una funzione costante, ma non pensare ad esso come un immutabile.

diamo

  • consente di creare una funzione locale, il che significa che è portata sarà valida solo all'interno del blocco racchiude in cui risiede.

riferimenti MDN:

Nota: se non ricordo male, lasciare e const non sono interpretati correttamente da tutti i browser.

Problemi correlati