Sass变量的默认范围

我在跨范围的Sass中使用变量默认值时遇到问题。我的测试示例是:

@mixin foo { 
        $val: 'red' !default; 
        .bar { 
                color: $val; 
        } 

} 

@include foo; 
.class1 { 
        $val: 'green'; 
        @include foo; 
        .class11 { 
                @include foo; 
        } 
} 

$val: 'black'; 
.class2 { 
        @include foo; 
} 

.class3 { 
        $val: 'blue'; 
        @include foo; 
} 

.class4 { 
        @include foo; 

}

它编译为:

.bar { 
  color: "red"; 

} 

.class1 .bar { 
  color: "red"; 
} 

.class1 .class11 .bar { 
  color: "red"; 
} 

.class2 .bar { 
  color: "black"; 
} 

.class3 .bar { 
  color: "blue"; 
} 

.class4 .bar { 
  color: "blue"; 

}

如您所见,变量$ val在mixin foo中定义为'red'!default。我希望导入mixin会将$ val设置为“ red”,除非已经定义。但是,在class1中,$ val在本地定义为“绿色”,导入mixin foo会将其替换为“红色”。在其他类中,在将$ val全局定义为“黑色”之后,导入mixin可以按预期进行,并且$ val保留其已定义的值。

我究竟做错了什么?