如何在Sass中分配一个全局variables?

我运行这个Sass代码:

$a: 1; @if 2 + 2 == 4 { $a: 2; } @debug $a; 

我期望看到2.然而,产出是:

 Line 5 DEBUG: 1 

我知道Sass在@if范围内创build了一个新的$avariables。 我怎样才能改变这种行为并为全局$a赋值?

我使用Sass 3.4.0。

当你使用Sass 3.4+时,你应该把!global标志附加到你的variables声明中:

 $a: 1; @if 2 + 2 == 4 { $a: 2 !global; } @debug $a; // will output 2 

关于variables声明的原始SASS_REFERENCE指出:

“variables只能在定义的嵌套select器的级别中使用, 如果它们是在任何嵌套的select器之外定义的,则它们在任何地方都是可用的。

但是3.4+的SASS_CHANGELOG显示这个行为已经改变了:

所有不在文档顶层的variables赋值现在默认是本地的如果有一个同名的全局variables,除非使用!global标志,否则不会被覆盖。

例如, $var: value !global$var: value !global分配给$var 。 这种行为可以使用feature-exists(global-variable-shadowing)来检测。

通过反复试验,我find了一个解决scheme:我必须在任务中添加!global

 $a: 1; @if 2 + 2 == 4 { $a: 2 !global; } @debug $a;