Diferència entre revisions de la pàgina «Solucio clausures»

De wikiserver
Dreceres ràpides: navegació, cerca
 
(Hi ha 4 revisions intermèdies del mateix usuari que no es mostren)
Línia 1: Línia 1:
 +
'''Exemple'''
 +
 +
<source lang="java">
 +
 +
var missatge = "hola";
 +
var despres;
 +
 +
function accedirValor(){
 +
    var missatge_intern = "adeu";
 +
    function accedirValorInternExtern(){
 +
        alert("extern: " +  missatge);        //les variables es mantenen vives
 +
        alert("intern: " +missatge_intern); 
 +
    }
 +
    despres = accedirValorInternExtern;        //es igual a accedirValorInterneExtern();
 +
}
 +
 +
accedirValor();
 +
despres();      // mostra 'extern: hola' y després 'intern: adeu'
 +
</source>
 +
 +
'''Exemple'''
 +
 +
<source lang="java">
 +
var missatge = "hola";
 +
var despres;
 +
 +
function accedirValor(){
 +
    var missatge_intern = "adeu";
 +
    function accedirValorInternExtern(salutacio){
 +
        alert("extern: " +  missatge);
 +
        alert("intern: " + missatge_intern);
 +
        alert("salutacio " + salutacio);
 +
        alert("fin " + fin);
 +
    }
 +
    despres = accedirValorInternExtern;
 +
}
 +
 +
alert("mintern" + missatge_intern);    //dona error hi ha que comentar la linia
 +
alert(fin);                            // undefined!!
 +
var fin = "tard";
 +
accedirValor();
 +
despres("fins despres");   
 +
         
 +
/*mostra 'extern:hola',
 +
'intern:adeu',
 +
'salutació: fins després'
 +
'fins tard'*/
 +
 +
</source>
 +
 +
'''Exemple'''
 +
 
<source lang="java">
 
<source lang="java">
 
function Persona(){
 
function Persona(){
Línia 80: Línia 132:
 
   
 
   
  
unicId();  
+
unicId();     // 0
  
unicId();  
+
unicId();     // 1
 +
 
 +
unicId();    //  2
 +
 
 +
 
 +
</source>
 +
 
 +
'''Exercici 5. Digues que mostra.'''
 +
<source lang="java">
  
unicId();  
+
var crearContador = function () {
 +
    var cuenta, f;
 +
    cuenta = 0;
 +
    f = function () {
 +
        cuenta = cuenta + 1;
 +
        return cuenta;
 +
    };
 +
    return f;
 +
};
 +
var contador = crearContador();
 +
/* contador es una funcion que no recibe argumentos
 +
  y retorna una cuenta */
  
 +
var a = contador(); // obtiene 1
 +
var b = contador(); // obtiene 2
 +
var c = contador(); // obtiene 3
  
 +
var contador2 = crearContador(); // crear otro mas
 +
var d = contador2(); // obtiene 1
 +
var e = contador2(); // obtiene 2
 +
var f = contador(); // obtiene 4 del primero
 
</source>
 
</source>

Revisió de 11:28, 6 nov 2014

Exemple

var missatge = "hola";
var despres;
 
function accedirValor(){
    var missatge_intern = "adeu";
    function accedirValorInternExtern(){
        alert("extern: " +  missatge);        //les variables es mantenen vives 
        alert("intern: " +missatge_intern);   
    }
    despres = accedirValorInternExtern;        //es igual a accedirValorInterneExtern();
}
 
accedirValor();
despres();       // mostra 'extern: hola' y després 'intern: adeu'

Exemple

var missatge = "hola";
var despres;
 
function accedirValor(){
    var missatge_intern = "adeu";
    function accedirValorInternExtern(salutacio){
        alert("extern: " +  missatge);
        alert("intern: " + missatge_intern);
        alert("salutacio " + salutacio);
        alert("fin " + fin);
    }
    despres = accedirValorInternExtern;
}
 
alert("mintern" + missatge_intern);    //dona error hi ha que comentar la linia
alert(fin);                            // undefined!!
var fin = "tard";
accedirValor();
despres("fins despres");    
          
/*mostra 'extern:hola', 
'intern:adeu', 
'salutació: fins després'
'fins tard'*/

Exemple

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();      //mostra '667'


Exercici 4. 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();     // 0

unicId();     // 1

unicId();     //  2

Exercici 5. Digues que mostra.

var crearContador = function () {
    var cuenta, f;
    cuenta = 0;
    f = function () {
        cuenta = cuenta + 1;
        return cuenta;
    };
    return f;
};
var contador = crearContador();
/* contador es una funcion que no recibe argumentos
   y retorna una cuenta */

var a = contador(); // obtiene 1
var b = contador(); // obtiene 2
var c = contador(); // obtiene 3

var contador2 = crearContador(); // crear otro mas
var d = contador2(); // obtiene 1
var e = contador2(); // obtiene 2
var f = contador(); // obtiene 4 del primero