Ho notato che alcuni linguaggi come C, C ++, Java, Perl e .NET Visual Basic hanno un ambito di "blocco", il che significa che una variabile verrà definita solo all'interno del blocco di codice specifico in cui è stato dichiarato.
Ad esempio (C ++):
if (true) {
int x = 1;
}
std::cout << x << std::endl;
Questo codice non verrà compilato poiché x
è visibile solo all'interno dell'ambito del blocco creato dall'istruzione if
.
error: 'x' was not declared in this scope
Ma linguaggi come VBA, Python e Javascript hanno un ambito "basato sulla funzione", il che significa che l'unica volta che viene creato un nuovo ambito è quando viene definita una nuova funzione.
Ad esempio (VBA):
If True Then
Dim x As Integer
x = 1
End If
MsgBox(x)
Questo codice viene eseguito correttamente e il valore di x
è visibile al di fuori dell'istruzione if
.
Questo tipo di ambito mi sembra piuttosto confuso perché visivamente sembra che x
debba "appartenere" all'istruzione if
.
Quindi questo solleva la domanda: ci sono dei vantaggi oltre al semplice aspetto ... come vantaggi di prestazioni / vantaggi di velocità di compilazione / etc ... per una lingua da " la funzione "scoped piuttosto che" block "scoped?