less变量的延迟加载
我们已知less变量的作用域为块级作用域,每一个花括号为一个作用域块,那如果我们在同一个块级作用域下,同时定义了两个名字相同,但值不相同的变量时,less会怎么编译呢?
我们来看下面这个例子:
1 | .className { |
按照通常的理解,代码多数是按照顺序执行和编译的,那我们认为代码第三行引用的变量,因此按此理解,这段代码应该编译为:
1 | .className { |
但我们用真实的less编译环境来输出这段代码,返回的结果却是:
1 | .className { |
由结果看到,在当前块级作用域内,靠前的变量引用,却拿到了更靠后的变量定义,这就是“less变量的延迟加载”。
less编译流会优先处理变量的定义和赋值,然后再处理变量的引用,这就导致同一块级作用域内,如果同一个变量被多次赋值,那么,在当前块级作用域内,对此变量的引用,将会得到最后一次赋值的结果。
尝试了一下当前作用域下引用上级作用域的变量,结果也是一样的:
1 | @bgcolor: blue; |
输出为:
1 | .className { |
当然,虽然有这么一个很奇怪的机制,但这种在实际场景中并没有什么意义,通常同一个作用域下,很少会重复为同一个变量赋值,这里纯当一个有趣的知识,了解一下就好了。