Solucio clausures
De wikiserver
La revisió el 13:01, 4 nov 2014 per Jnoguera (Discussió | contribucions) (Es crea la pàgina amb «<source lang="java"> function Persona(){ var anys = 0; this.getAnys = function(){ return anys; }; this.envellir = function(){ anys++; }; } var joan = new Person…».)
function Persona(){
var anys = 0;
this.getAnys = function(){
return anys;
};
this.envellir = function(){
anys++;
};
}
var joan = new Persona();
joan.envellir();
alert("no podem accedir: " + joan.anys); /*mostra 'no podem accedir: undefined'*/
alert("getanys: " + joan.getAnys()); /*mostra 'getanys: 1'*/
Exercici 1. Digues que mostra.
function concatenar(s1) {
return function(s2) {
return s1 + ' ' + s2;
};
}
var diHola = concatenar("Hola");
alert( diHola("visitante") ); /*mostra 'Hola visitante'*/
Exercici 2. Digues que mostra.
function dirHola2(nom) {
var texto = 'Hola ' + nom; // local variable
var dirAlerta= function() { alert(texto); }
return dirAlerta;
}
var dir2=dirHola2('Joan');
dir2(); /*mostra 'Hola Joan'*/
Exercici 3. Digues que mostra.
function dir667() {
// Variable local que acaba en la clausura
var num = 666;
var dirAlerta= function() { alert(num); }
num++;
return dirAlerta;
}
var dirNombre=dir667();
dirNombre();
Exercici 4. Digues que mostra.
function estableixUnesGlobals() {
// variable global que acaba dins de la clausura
var num = 444;
// emmagatzema algunes referències a funcions com a variables globals
gAlertaNombre = function() { alert(num); }
gIncrementaNombre = function() { num++; }
gPonNombre = function(x) { num = x; }
}
getAlertaNombre();
getIncrementeNombre();
gPonNombre(5);
gPonNombre(-8888);
alert(getAlertaNombre.toString());
Exercici 5. Digues que mostra.
var unicId = (function() {
var comptador = 0;
return function() {
return "únic-id-" + comptador++;
};
})(); // Funció que s'auto-invoca i executa automàticament
unicId();
unicId();
unicId();