Diferència entre revisions de la pàgina «Solucio clausures»
De wikiserver
(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…».) |
|||
| (Hi ha 5 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 65: | Línia 117: | ||
var dirNombre=dir667(); | var dirNombre=dir667(); | ||
| − | dirNombre(); | + | dirNombre(); //mostra '667' |
</source> | </source> | ||
'''Exercici 4. Digues que mostra.''' | '''Exercici 4. Digues que mostra.''' | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
<source lang="java"> | <source lang="java"> | ||
| Línia 101: | Línia 132: | ||
| − | unicId(); | + | unicId(); // 0 |
| + | |||
| + | unicId(); // 1 | ||
| + | |||
| + | unicId(); // 2 | ||
| + | |||
| + | |||
| + | </source> | ||
| − | + | '''Exercici 5. Digues que mostra.''' | |
| + | <source lang="java"> | ||
| − | + | 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