Torna indietro   Hardware Upgrade Forum > Software > Programmazione

MSI PRO MAX EDGE AI+, Ryzen AI Max+ 395 e 128 GB per far girare in locale anche i modelli più grandi
MSI PRO MAX EDGE AI+, Ryzen AI Max+ 395 e 128 GB per far girare in locale anche i modelli più grandi
Abbiamo provato MSI PRO MAX EDGE AI+, un mini-PC professionale progettato per eseguire modelli di intelligenza artificiale in locale, senza dipendere dal cloud. Il sistema abbina il processore AMD Ryzen AI Max+ 395, 128 GB di memoria unificata e un telaio in alluminio da appena 4 litri, con l'obiettivo di offrire capacità di elaborazione elevate in un formato compatto.
Recensione vivo X500 Pro Max: la fotografia mobile ha un nuovo protagonista
Recensione vivo X500 Pro Max: la fotografia mobile ha un nuovo protagonista
Il nuovo top di gamma vivo punta su un comparto fotografico particolarmente articolato, con un teleobiettivo da 200 megapixel e teleconvertitori esterni capaci di arrivare a 400 mm equivalenti. Lo abbiamo provato a Tenerife, mettendo alla prova fotocamere, prestazioni, autonomia e accessori. Ecco come si è comportato.
WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà
WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà
Un mondo affollato e vivo, personaggi destinati a sparire a fine test e nessuno a inseguire l'oggetto giusto. Beta e stress test di World of Warcraft: Forever hanno fatto emergere un roleplay spontaneo, tra danze a Goldshire e code ordinate ai PNG
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 08-07-2013, 21:52   #1
aeroxr1
Senior Member
 
Iscritto dal: Mar 2006
Messaggi: 2057
javascript e lo scope.. problemini..

Ciao,
ho un dubbio che non capisco :/

faccio un esempio almeno rendo il tutto di più semplice comprensione :

cosi il tutto funziona correttamente :

Codice:
var bottoni = document.getElementsByTagName('BUTTON');
	
		 for(var i=0; i<menu.length; i++)
		 {
			bottoni[i].onclick = (function(){ // Definisci la funzione in cui ti salvi il valore corrente della i
					var currentI = i;
				    return function(){ // ritorni la funzione (currentI sarà sempre diversa ad ogni iterazione perché cambia lo scope)
						recinto.setLevel(currentI); 
						recinto.inizializzazione();
						}
					})(); 
		 }
mentre se faccio :
Codice:
 for(var i=0; i<3; i++)
		 {
			bottoni[i].onclick = function(){	
						recinto.setLevel(i); 
						recinto.inizializzazione();
						}
ogni bottone prende setLevel con i=3 .. non capisco.. il passaggio non dovrebbe essere per valore ? come mai qui lo fa come riferimento ???
aeroxr1 è offline   Rispondi citando il messaggio o parte di esso
Old 09-07-2013, 02:21   #2
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Stai creando una funzione in un loop, che in JavaScript è una cosa generalmente sconsigliata esattamente per il "problema" che stai affrontando.

Ciò che accade, in realtà, è che nel loop stai facendo soltanto un'assegnazione, cioè una cosa del tutto simile alla seguente:

Codice:
for (var i = 0; i < collection.length; ++i) {
    object.property = value;
}
Contestualizzando l'esempio al tuo codice, si dà il caso che questo valore sia una funzione (che verrà invocata al click di un pulsante), e questa si accompagna ad una cattura delle variabili dello scope esterno che sono utilizzate al suo interno. In sostanza: stai catturando non il valore dell'indice i al momento dell'iterazione, ma un riferimento ad esso. Al momento del click (e, quindi, dell'invocazione dell'handler), tale indice ha il valore che lo ha fatto uscire dal loop: ecco perché vedi i = 3.

Il tuo primo snippet è corretto. In realtà, però potresti anche evitarti la nuova variabile currentI, visto che stai usando una IIFE, alla quale puoi passare direttamente il valore di i:

Codice:
var bottoni = document.getElementsByTagName('button');
	
for (var i=0; i < menu.length; ++i) {
    bottoni[i].onclick = (function (i) {
        return function() {
            recinto.setLevel(i);
            recinto.inizializzazione();
        };
    })(i);
}
In questo modo hai che:
  1. il nome del parametro dell'IIFE sta nascondendo l'omonimo indice del loop esterno, quindi puoi utilizzare senza paura lo stesso nome anche nella funzione più interna;
  2. il valore associato a tale parametro è quello assunto durante la corrispondente iterazione.

HTH
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 09-07-2013, 14:47   #3
__ZERO_UNO__
Member
 
L'Avatar di __ZERO_UNO__
 
Iscritto dal: Jul 2009
Città: Milano
Messaggi: 270
Long story short, for non ha scope come le funzioni. Quando la funzione è invocata, i viene cercata e trovata nello scope esterno ed avrà l'ultimo valore che gli è stato assegnato.
Non ragionare in termini di passaggio per valore o riferimento–che non parlando di argomenti di funzione non ha alcun senso–, bensì in termini di scope.
__________________

AMD PII x4 955 BE | Sapphire HD4850 Vapor-X 1 GB | Samsung SpinPoint F1 500GB | Samsung EcoGreen F4 2TB
Gigabyte GA-MA790FXT-UD5P | Fractal Design Define R3 USB3.0 Titanium Grey | CORSAIR 650W CMPSU-650TX
Noctua U12P SE2 | 2 x 2GB Kingston 1333 MHz | Samsung SyncMaster P2450 | Samsung SyncMaster T200
__ZERO_UNO__ è offline   Rispondi citando il messaggio o parte di esso
Old 09-07-2013, 20:16   #4
aeroxr1
Senior Member
 
Iscritto dal: Mar 2006
Messaggi: 2057
Quote:
Originariamente inviato da __ZERO_UNO__ Guarda i messaggi
Long story short, for non ha scope come le funzioni. Quando la funzione è invocata, i viene cercata e trovata nello scope esterno ed avrà l'ultimo valore che gli è stato assegnato.
Non ragionare in termini di passaggio per valore o riferimento–che non parlando di argomenti di funzione non ha alcun senso–, bensì in termini di scope.
giusto Ora comunque mi è tutto molto più chiaro Grazie ragazzi ! ancora una volta mi avete spiegato qualcosa con un linguaggio semplicissimo
aeroxr1 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


MSI PRO MAX EDGE AI+, Ryzen AI Max+ 395 e 128 GB per far girare in locale anche i modelli più grandi MSI PRO MAX EDGE AI+, Ryzen AI Max+ 395 e 128 GB...
Recensione vivo X500 Pro Max: la fotografia mobile ha un nuovo protagonista Recensione vivo X500 Pro Max: la fotografia mobi...
WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà WoW Forever: la beta è stato uno dei mome...
Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA Oracle AI World 2026: in Europa prima la sovrani...
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort DS N°7 E-Tense: il SUV premium made in Melfi...
Xbox pronta a dire addio allo studio di ...
Meta stacca la spina: fine del supporto ...
Scambio file senza limiti: Google porta ...
Taiwan sbarca a EICMA 2026: maxi scooter...
L'integrazione tra Windows e Android mig...
Project Helix potrebbe abbandonare le Ex...
Galaxy Z Fold9 Ultra, fotocamere ferme a...
Hacker prendono di mira il plasma per le...
In&motion a EICMA 2026: l'airbag sma...
ChatGPT, 1,2 miliardi di utenti e un qui...
Il progetto ImmunoSafe dell'Universit&ag...
NVIDIA ai data center: i partner devono ...
L'intelligenza artificiale entra nei bra...
Un pannello e-ink può diventare un assis...
Il progetto open source che doveva liber...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 14:31.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v