1- Avec Lua, chaque fonction et userdata possède une table qui lui est associée, appelée "table d'environnement".
2- Comme les méta-tables, les tables d'environnement sont des tables normales et plusieurs objets peuvent partager la même table d'environnement.
3- Lua, permet de manipuler l'environnement d'un objet uniquement par l'intermédiaire de la bibliothèque de débogage.
4- Les fonctions écrites en C et les userdatas, partagent l'environnement de la fonction C qui a été créée.
5- Les fonctions non imbriquées de Lua (créées avec loadfile, loadstring ou load) partage l'environnement global.
6- Les fonctions imbriquées de Lua, partage l'environnement courant, celui où elles sont définies.
7- Les environnements associés à userdata n'ont aucun sens pour Lua. C'est seulement une façon pratique pour les programmeurs, d'associer une table à un userdata.
8- L'environnement associé à une fonction C, peut être directement accessible par le code C. Il est utilisé comme environnement par défaut, pour les autres fonctions C et userdata créés par la fonction.
9- L'environnement associé à une fonction Lua, est utilisé comme environnement courant pour tout le code de la fonction.
10- Un environnement lexical change l'environnement courant à l'intérieur de son champ d'application.
11- Dans tous les cas, l'environnement courant est la table que Lua utilise pour résoudre les variables globales et initialiser les fonctions imbriquées.