En Smalltalk, les variables sont déclarées par un nom. Leur type n'est connu qu'à l'exécution. On distingue plusieurs sortes de variables :
Par rapport à d'autres langages, Smalltalk possède deux types de variables d'instances : les variables référant à un objet (classique) et les variables indexées , contenant un tableau de variable. Les variables indexées sont gérées directement par les primitives du langage. Nous n'en dirons pas plus. Sachez cependant que les variables indexées facilitent le codage et l'efficacité d'accès pour certains objets tels que les collections ou les vues.
Chaque variable est accessible dans la portée sous-entendue par son nom : une variable locale est visible dans le bloc qui la déclare, une variable d'instance est visible par une instance, une variable de classe est visible par la classe, ses sous-classes et ses instances. Ces différents types de variables seront examinés dans le sections suivantes. Attention, il ne faut pas confondre les variables d'instance de la méta-classe des variables de classe. Les premières sont propres à chaque métaclasse : si elles sont modifiées elles le sont uniquement pour la classe. Les secondes sont communes à la classe et ses sous-classes : si une méthode modifie la valeur alors toutes les classes ont cette nouvelle valeur.