结合性问题

问题1:三元运算符是有右结合性,那么下面代码为什么没有执行a1?
js
function a1() { console.log('a1'); return 'a1'; } function a2() { console.log('a2'); return 'a2'; } const text = a2() ? '3' : a1() ? '1' : '2'; console.log(text);

答:结合性不等于执行顺序。结合性是编译时的语法规则,而执行顺序是运行时的求值规则。

问题2:小括号的优先级最高,为什么下面代码没有先执行小括号的内容?
js
function a1() { console.log('a1'); return 'a1'; } function a2() { console.log('a2'); return 'a2'; } const text = a2() ? '3' : (a1() ? '1' : '2'); console.log(text);

答:

  1. 括号优先级最高:确保运算结构正确
  2. 短路求值更强大:决定代码是否真正执行
  3. 结构 ≠ 执行:有些代码在语法上存在,但运行时可能不会执行