SlideShare a Scribd company logo
1 of 22
Download to read offline
Capire
Javascript:
le funzioni
Particolarità e utilizzo
delle funzioni in
Javascript
Paolo Caramanica
Sommario
 Introduzione: i linguaggi procedurali e le funzioni
 Perché le funzioni?
 Definire una funzione in Javascript
 Chiamata, parametri e valore di ritorno
 Live demo
 Particolarità delle funzioni in Javascript
 Le function expression
 Funzioni come valori
 Le arrow function
 Live demo
 Lo scope
 Lo scope
 Lexical Environment (esempio)
 Il concetto di closure
 var vs let
 Live demo
Introduzione
I linguaggi procedurali e le funzioni
Perché le funzioni?
 Problema:
 Spesso è necessario effettuare la stessa operazione (o operazioni simili) in diversi punti del codice
 Questo porta a codice duplicato
 Soluzione:
 Il paradigma di programmazione procedurale introduce le funzioni (procedure)
 Le funzioni sono blocchi di codice, identificati da un nome, richiamabili in altri punti del
programma
 Possono ricevere dei parametri in input e produrre un output (valore di ritorno)
Definire una funzione in Javascript
 Per definire una funzione in Javascript:
 Si usa la keyword function
 Si sceglie un nome univoco
 Si inserisce il blocco di codice tra parentesi graffe
 Esempio:
function Saluto() {
alert(‘Ciao’);
}
Chiamata, parametri e valore di ritorno
 Chiamata (esecuzione) di una funzione precedentemente definita:
Saluto()
 Le funzioni possono accettare parametri, o argomenti, cioè valori dati in input alla
funzione
function Saluto2(nome) { … }
 Le funzioni possono restituire un valore (valore di ritorno), cioè fornire un output utilizzabile
dal codice che l’ha chiamata
function AreaQuadrato(lato) {
return lato*lato;
}
Live demo
Le funzioni in Javascript
Particolarità delle funzioni in Javascript
Le function expression
 In Javascript le funzioni possono essere definite anche tramite le function expression
 Esempio: (function expression)
let f = function() { alert(‘Ciao!’); }
è equivalente a (function declaration)
function f() { alert(‘Ciao!’); }
Funzioni come valori
 Le funzioni in Javascript sono dei valori:
 Possono essere assegnate ad una variabile (function espression)
 Possono essere definite dentro un’altra funzione (nesting)
 Possono essere passate come parametri ad un’altra funzione (callback)
 Possono essere restituite da una funzione
Le arrow function
 In Javascript esiste una terza sintassi per definire le funzioni:
 Function declaration:
function Somma(a,b) { return a+b; }
 Function expression:
let Somma = function(a,b) { return a+b; }
 Arrow function:
let Somma = (a,b) => a+b
Live demo
Lo scope
Lo scope e le closure
Lo scope
 Scope: visibilità, quindi possibilità di richiamare una variabile in un determinato punto del
codice
 In Javascript:
 Le variabili definite con let all’interno di un blocco di codice { … } sono visibili solo in tale blocco
(block scope)
 Se si fa riferimento ad un nome che non esiste nel blocco { … }, si cerca nel blocco che lo
contiene, in modo ricorsivo
 Nelle funzioni innestate:
 Se si fa riferimento ad una variabile non definita nella funzione stessa, si cerca nella funzione
immediatamente superiore, in modo ricorsivo
 Lo scope viene gestito tramite il Lexical Environment
Lexical Environment (esempio)
Il concetto di closure
 Nell’esempip precedente, il lexical environment di una funzione:
 Viene creato quando inizia l’esecuzione
 Viene eliminato quando termina l’esecuzione
 Supponiamo che una funzione b sia definita dentro una funzione a:
 Che succede se b continua ad eseguire dopo che a è terminata?
 In Javascript, una funzione «ricorda» l’environment in cui viene creata e le relative
variabili, cioè è una closure.
Lexical environment (esempio 2)
Lexical environment (esempio 3)
var vs let
 Le variabili dichiarate con var:
 Possono essere utilizzate prima della dichiarazione
 Possono essere ri-dichiarate
 Non hanno block scope (sono visibili globalmente o all’interno della funzione in cui sono definite)
Live demo
Contatti
Email: paolocaramanica@gmail.com
Linkedin: https://it.linkedin.com/in/paolo-caramanica-436942a/it-it
Facebook: https://it-it.facebook.com/paolo.caramanica
Q&A

More Related Content

What's hot

Acadevmy - ES6 Modern JS Today
Acadevmy - ES6 Modern JS TodayAcadevmy - ES6 Modern JS Today
Acadevmy - ES6 Modern JS TodayFrancesco Sciuti
 
Pe a1 perl-unit_testing
Pe a1 perl-unit_testingPe a1 perl-unit_testing
Pe a1 perl-unit_testingMajong DevJfu
 
PHP: strutture di controllo e funzioni
PHP: strutture di controllo e funzioniPHP: strutture di controllo e funzioni
PHP: strutture di controllo e funzioniextrategy
 
Conversione diretta ed inversa tra automi a stati non definiti (nfa) ed espre...
Conversione diretta ed inversa tra automi a stati non definiti (nfa) ed espre...Conversione diretta ed inversa tra automi a stati non definiti (nfa) ed espre...
Conversione diretta ed inversa tra automi a stati non definiti (nfa) ed espre...Paolo Oltramonti
 
Conversione diretta ed inversa tra automi a stati non definiti (nfa) ed espre...
Conversione diretta ed inversa tra automi a stati non definiti (nfa) ed espre...Conversione diretta ed inversa tra automi a stati non definiti (nfa) ed espre...
Conversione diretta ed inversa tra automi a stati non definiti (nfa) ed espre...Paolo Oltramonti
 
LINQ, Entities Framework & ORMs
LINQ, Entities Framework & ORMsLINQ, Entities Framework & ORMs
LINQ, Entities Framework & ORMsJUG Genova
 
Introduzione a JavaScript
Introduzione a JavaScriptIntroduzione a JavaScript
Introduzione a JavaScriptGiovanni Buffa
 
Deep diving C# 4 (Raffaele Rialdi)
Deep diving C# 4 (Raffaele Rialdi)Deep diving C# 4 (Raffaele Rialdi)
Deep diving C# 4 (Raffaele Rialdi)DotNetMarche
 
JavaScript Object Oriented
JavaScript Object OrientedJavaScript Object Oriented
JavaScript Object OrientedManuel Scapolan
 
PHP:funzioni e interazione con MySQL
PHP:funzioni e interazione con MySQLPHP:funzioni e interazione con MySQL
PHP:funzioni e interazione con MySQLextrategy
 

What's hot (18)

Acadevmy - ES6 Modern JS Today
Acadevmy - ES6 Modern JS TodayAcadevmy - ES6 Modern JS Today
Acadevmy - ES6 Modern JS Today
 
Funzioni
FunzioniFunzioni
Funzioni
 
Pe a1 perl-unit_testing
Pe a1 perl-unit_testingPe a1 perl-unit_testing
Pe a1 perl-unit_testing
 
PHP: strutture di controllo e funzioni
PHP: strutture di controllo e funzioniPHP: strutture di controllo e funzioni
PHP: strutture di controllo e funzioni
 
Conversione diretta ed inversa tra automi a stati non definiti (nfa) ed espre...
Conversione diretta ed inversa tra automi a stati non definiti (nfa) ed espre...Conversione diretta ed inversa tra automi a stati non definiti (nfa) ed espre...
Conversione diretta ed inversa tra automi a stati non definiti (nfa) ed espre...
 
Conversione diretta ed inversa tra automi a stati non definiti (nfa) ed espre...
Conversione diretta ed inversa tra automi a stati non definiti (nfa) ed espre...Conversione diretta ed inversa tra automi a stati non definiti (nfa) ed espre...
Conversione diretta ed inversa tra automi a stati non definiti (nfa) ed espre...
 
Pillole di C++
Pillole di C++Pillole di C++
Pillole di C++
 
Dispensa di PL-SQL
Dispensa di PL-SQLDispensa di PL-SQL
Dispensa di PL-SQL
 
Corso c++
Corso c++Corso c++
Corso c++
 
Programmazione Top Down in C++
Programmazione Top Down in C++Programmazione Top Down in C++
Programmazione Top Down in C++
 
Linq ed oltre
Linq ed oltreLinq ed oltre
Linq ed oltre
 
LINQ, Entities Framework & ORMs
LINQ, Entities Framework & ORMsLINQ, Entities Framework & ORMs
LINQ, Entities Framework & ORMs
 
Introduzione a JavaScript
Introduzione a JavaScriptIntroduzione a JavaScript
Introduzione a JavaScript
 
Deep diving C# 4 (Raffaele Rialdi)
Deep diving C# 4 (Raffaele Rialdi)Deep diving C# 4 (Raffaele Rialdi)
Deep diving C# 4 (Raffaele Rialdi)
 
iContract
iContractiContract
iContract
 
PHP
PHPPHP
PHP
 
JavaScript Object Oriented
JavaScript Object OrientedJavaScript Object Oriented
JavaScript Object Oriented
 
PHP:funzioni e interazione con MySQL
PHP:funzioni e interazione con MySQLPHP:funzioni e interazione con MySQL
PHP:funzioni e interazione con MySQL
 

Similar to Le funzioni in javascript

Two months of Kotlin
Two months of KotlinTwo months of Kotlin
Two months of KotlinErik Minarini
 
Programmazione a oggetti tramite la macchina del caffé (pt. 2)
Programmazione a oggetti tramite la macchina del caffé (pt. 2)Programmazione a oggetti tramite la macchina del caffé (pt. 2)
Programmazione a oggetti tramite la macchina del caffé (pt. 2)Marcello Missiroli
 
Ripasso funzioni
Ripasso funzioniRipasso funzioni
Ripasso funzionimarckmart
 
Py a3 python-metaprogramming
Py a3 python-metaprogrammingPy a3 python-metaprogramming
Py a3 python-metaprogrammingMajong DevJfu
 
corso web developer - Introduzione a Javascript
corso web developer - Introduzione a Javascriptcorso web developer - Introduzione a Javascript
corso web developer - Introduzione a JavascriptRiccardo Piccioni
 
Functional Programming in Java - Le Espressioni Lambda
Functional Programming in Java - Le Espressioni LambdaFunctional Programming in Java - Le Espressioni Lambda
Functional Programming in Java - Le Espressioni LambdaEzio Sperduto, PhD
 
Primo Incontro Con Scala
Primo Incontro Con ScalaPrimo Incontro Con Scala
Primo Incontro Con ScalaFranco Lombardo
 
Scala Programming Linux Day 2009
Scala Programming Linux Day 2009Scala Programming Linux Day 2009
Scala Programming Linux Day 2009Massimiliano Dessì
 
Introduzione a scala prima parte
Introduzione a scala   prima parteIntroduzione a scala   prima parte
Introduzione a scala prima parteOnofrio Panzarino
 
70k linee di codice, tangle architetturali e le sfide del refactoring
70k linee di codice, tangle architetturali e le sfide del refactoring70k linee di codice, tangle architetturali e le sfide del refactoring
70k linee di codice, tangle architetturali e le sfide del refactoringPaolo Predonzani
 
Javascript avanzato: sfruttare al massimo il web
Javascript avanzato: sfruttare al massimo il webJavascript avanzato: sfruttare al massimo il web
Javascript avanzato: sfruttare al massimo il webRoberto Messora
 
Lezione design patterns 2011 (Peron)
Lezione design patterns 2011 (Peron)Lezione design patterns 2011 (Peron)
Lezione design patterns 2011 (Peron)lukebonham
 
ZoeFX: un framework MVC per JavaFX
ZoeFX: un framework MVC per JavaFXZoeFX: un framework MVC per JavaFX
ZoeFX: un framework MVC per JavaFXTiziano Lattisi
 
Java 8: le nuove-interfacce di Ezio Sperduto
Java 8: le nuove-interfacce di Ezio SperdutoJava 8: le nuove-interfacce di Ezio Sperduto
Java 8: le nuove-interfacce di Ezio SperdutoVitalij Zadneprovskij
 
Cattive abitudini e-lineeguida
Cattive abitudini e-lineeguidaCattive abitudini e-lineeguida
Cattive abitudini e-lineeguidaRobert Casanova
 

Similar to Le funzioni in javascript (20)

Two months of Kotlin
Two months of KotlinTwo months of Kotlin
Two months of Kotlin
 
Programmazione a oggetti tramite la macchina del caffé (pt. 2)
Programmazione a oggetti tramite la macchina del caffé (pt. 2)Programmazione a oggetti tramite la macchina del caffé (pt. 2)
Programmazione a oggetti tramite la macchina del caffé (pt. 2)
 
Java OCA teoria 1
Java OCA teoria 1Java OCA teoria 1
Java OCA teoria 1
 
Ripasso funzioni
Ripasso funzioniRipasso funzioni
Ripasso funzioni
 
Corso Java
Corso JavaCorso Java
Corso Java
 
Py a3 python-metaprogramming
Py a3 python-metaprogrammingPy a3 python-metaprogramming
Py a3 python-metaprogramming
 
corso web developer - Introduzione a Javascript
corso web developer - Introduzione a Javascriptcorso web developer - Introduzione a Javascript
corso web developer - Introduzione a Javascript
 
Vb.Net
Vb.NetVb.Net
Vb.Net
 
Functional Programming in Java - Le Espressioni Lambda
Functional Programming in Java - Le Espressioni LambdaFunctional Programming in Java - Le Espressioni Lambda
Functional Programming in Java - Le Espressioni Lambda
 
Primo Incontro Con Scala
Primo Incontro Con ScalaPrimo Incontro Con Scala
Primo Incontro Con Scala
 
Scala Programming Linux Day 2009
Scala Programming Linux Day 2009Scala Programming Linux Day 2009
Scala Programming Linux Day 2009
 
Introduzione a scala prima parte
Introduzione a scala   prima parteIntroduzione a scala   prima parte
Introduzione a scala prima parte
 
70k linee di codice, tangle architetturali e le sfide del refactoring
70k linee di codice, tangle architetturali e le sfide del refactoring70k linee di codice, tangle architetturali e le sfide del refactoring
70k linee di codice, tangle architetturali e le sfide del refactoring
 
Javascript avanzato: sfruttare al massimo il web
Javascript avanzato: sfruttare al massimo il webJavascript avanzato: sfruttare al massimo il web
Javascript avanzato: sfruttare al massimo il web
 
Funzioni anonime in PHP 5.3
Funzioni anonime in PHP 5.3Funzioni anonime in PHP 5.3
Funzioni anonime in PHP 5.3
 
introduzione a symfony 2
introduzione a symfony 2 introduzione a symfony 2
introduzione a symfony 2
 
Lezione design patterns 2011 (Peron)
Lezione design patterns 2011 (Peron)Lezione design patterns 2011 (Peron)
Lezione design patterns 2011 (Peron)
 
ZoeFX: un framework MVC per JavaFX
ZoeFX: un framework MVC per JavaFXZoeFX: un framework MVC per JavaFX
ZoeFX: un framework MVC per JavaFX
 
Java 8: le nuove-interfacce di Ezio Sperduto
Java 8: le nuove-interfacce di Ezio SperdutoJava 8: le nuove-interfacce di Ezio Sperduto
Java 8: le nuove-interfacce di Ezio Sperduto
 
Cattive abitudini e-lineeguida
Cattive abitudini e-lineeguidaCattive abitudini e-lineeguida
Cattive abitudini e-lineeguida
 

Le funzioni in javascript

  • 1. Capire Javascript: le funzioni Particolarità e utilizzo delle funzioni in Javascript Paolo Caramanica
  • 2. Sommario  Introduzione: i linguaggi procedurali e le funzioni  Perché le funzioni?  Definire una funzione in Javascript  Chiamata, parametri e valore di ritorno  Live demo  Particolarità delle funzioni in Javascript  Le function expression  Funzioni come valori  Le arrow function  Live demo  Lo scope  Lo scope  Lexical Environment (esempio)  Il concetto di closure  var vs let  Live demo
  • 4. Perché le funzioni?  Problema:  Spesso è necessario effettuare la stessa operazione (o operazioni simili) in diversi punti del codice  Questo porta a codice duplicato  Soluzione:  Il paradigma di programmazione procedurale introduce le funzioni (procedure)  Le funzioni sono blocchi di codice, identificati da un nome, richiamabili in altri punti del programma  Possono ricevere dei parametri in input e produrre un output (valore di ritorno)
  • 5. Definire una funzione in Javascript  Per definire una funzione in Javascript:  Si usa la keyword function  Si sceglie un nome univoco  Si inserisce il blocco di codice tra parentesi graffe  Esempio: function Saluto() { alert(‘Ciao’); }
  • 6. Chiamata, parametri e valore di ritorno  Chiamata (esecuzione) di una funzione precedentemente definita: Saluto()  Le funzioni possono accettare parametri, o argomenti, cioè valori dati in input alla funzione function Saluto2(nome) { … }  Le funzioni possono restituire un valore (valore di ritorno), cioè fornire un output utilizzabile dal codice che l’ha chiamata function AreaQuadrato(lato) { return lato*lato; }
  • 8. Le funzioni in Javascript Particolarità delle funzioni in Javascript
  • 9. Le function expression  In Javascript le funzioni possono essere definite anche tramite le function expression  Esempio: (function expression) let f = function() { alert(‘Ciao!’); } è equivalente a (function declaration) function f() { alert(‘Ciao!’); }
  • 10. Funzioni come valori  Le funzioni in Javascript sono dei valori:  Possono essere assegnate ad una variabile (function espression)  Possono essere definite dentro un’altra funzione (nesting)  Possono essere passate come parametri ad un’altra funzione (callback)  Possono essere restituite da una funzione
  • 11. Le arrow function  In Javascript esiste una terza sintassi per definire le funzioni:  Function declaration: function Somma(a,b) { return a+b; }  Function expression: let Somma = function(a,b) { return a+b; }  Arrow function: let Somma = (a,b) => a+b
  • 13. Lo scope Lo scope e le closure
  • 14. Lo scope  Scope: visibilità, quindi possibilità di richiamare una variabile in un determinato punto del codice  In Javascript:  Le variabili definite con let all’interno di un blocco di codice { … } sono visibili solo in tale blocco (block scope)  Se si fa riferimento ad un nome che non esiste nel blocco { … }, si cerca nel blocco che lo contiene, in modo ricorsivo  Nelle funzioni innestate:  Se si fa riferimento ad una variabile non definita nella funzione stessa, si cerca nella funzione immediatamente superiore, in modo ricorsivo  Lo scope viene gestito tramite il Lexical Environment
  • 16. Il concetto di closure  Nell’esempip precedente, il lexical environment di una funzione:  Viene creato quando inizia l’esecuzione  Viene eliminato quando termina l’esecuzione  Supponiamo che una funzione b sia definita dentro una funzione a:  Che succede se b continua ad eseguire dopo che a è terminata?  In Javascript, una funzione «ricorda» l’environment in cui viene creata e le relative variabili, cioè è una closure.
  • 19. var vs let  Le variabili dichiarate con var:  Possono essere utilizzate prima della dichiarazione  Possono essere ri-dichiarate  Non hanno block scope (sono visibili globalmente o all’interno della funzione in cui sono definite)
  • 22. Q&A