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…».)
(dif) ← Versió més antiga | Versió actual (dif) | Versió més nova → (dif)
Dreceres ràpides: navegació, cerca
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();