Ответ 1
Определение $val: 'green'
локально в классе1 не меняет $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'