El scoping de un lenguaje refiere a su manejo de ámbitos o scopes.

Global vs. Local

Podemos limitar el ambiente de variables a un entorno particular.

local A B Var in
	A = 4
	B = 5
	Var = A*B + 3
	{Browse Var} % 23
end

En un scope global, las variables pueden ser accedidas en todo el programa, lo cual puede traer problemas.

Las variables pueden ser reasignadas al definir un nuevo entorno.

local A in
	A = 4
	local A in
		A = 7
		{Browse A} % 7
	end
	{Browse A} % 4
end

Si se referencia a una variable que no pertenece al entorno, se buscara en un entorno superior.

Estático vs. Dinámico

Supongamos el siguiente código:

local P Q in
	proc {Q X}
		{Browse stat(X)}
	end
	proc {P X}
		{Q X}
	end
	local Q in
		proc {Q X}
			{Browse dyn(X)}
		end
		{Q 'X'}
	end	
end

Si el scoping del lenguaje de programación es estático, se imprimirá stat(X). En caso contrario, se imprimirá dyn(X). Oz es un lenguaje con scoping estático.

En un lenguaje de scoping estático, las variables libres toman valor en el momento de la definición. En un lenguaje de scoping dinámico, las variables libres toman valor en el momento de la ejecución.

Los lenguajes estáticos son mas declarativos. Su comportamiento es mas facil de analizar.