No scope

Clear[x,fun1,fun2];
fun2:=Print[x];
fun1:=(x=371; fun2);
x=23;
fun1
fun2

Module: static scoping

Clear[x,fun1,fun2];
fun2:=Print[x];
fun1:=Module[{x=371}, fun2];
x=23;
fun1
fun2

Block: dynamic scoping

Clear[x,fun1,fun2];
fun2:=Print[x];
fun1:=Block[{x=371}, fun2];
x=23;
fun1
fun2