由于在javascript中if和else语句的花括号可以省略所以在理解上容易出现歧义
比如下面这个情况
var m = 1;
var n = 2;
if (m !== 1)
if (n === 2) console.log('hello');
else console.log('world');
如果不看javascript的上下文无关语法的描述,其实是没法判断最后一个else是和哪个if配对的,
实际上javascript规定了else总是和最近的if配对的,所以上面的代码相当于下面这样
if (m !== 1) {
if (n === 2) {
console.log('hello');
} else {
console.log('world');
}
}
对比下lisp代码强制要求使用括号包裹反而更简洁而且不容易出现歧义
(def m 1)
(def n 2)
(println
(if (not= 1 m)
(if (= 2 n)
"hello")
"world")
)