Определение $val: 'green'
локально в class1 не меняет $val: 'red' !default
в mixin, потому что он ищет глобальный $ val.На данный момент глобальный $ val не определен.
Тогда глобальный $ val определяется как «черный».После этого $ val в mixin ищет глобальный $ val.На данный момент глобальный $ val был определен как «черный».
Повторное локальное определение $ val изменит глобальный $ val, который был определен.
@mixin foo
$val: 'red' !default // defined locally
.bar
color: $val
@include foo // $val in mixin foo look for global $val. no global $val found, then 'red'
.class1
$val: 'green'
@include foo // $val in mixin foo look for global $val. no global $val found, then 'red'
color: $val // local $val 'green'
.class11
@include foo // $val in mixin foo look for global $val. no global $val found, then 'red'
$val: 'black' // defined globally at the first time
.class2
@include foo // $val in mixin foo look for global $val. $val found, 'black'
.class3
$val: 'blue' // change the gobal $val
@include foo // $val in mixin foo look for global $val. $val found, 'blue'
.class4
@include foo // $val in mixin foo look for global $val. $val found, 'blue'