为什么这段JS代码中'ho'比'hello'先输出?执行顺序疑问
执行顺序原因
这个现象和JavaScript的表达式求值规则直接相关,你遗漏的核心知识点有两个:
- 任何函数执行前,都会先对它的所有入参完成求值,拿到最终值后才会进入函数内部执行逻辑
- 字符串拼接
+运算符会先分别计算左右两个操作数的结果,再完成拼接操作
对应你的代码执行流程拆解
- 调用
init()进入函数执行上下文 - 处理
console.log("hello " + validate())语句:首先需要计算console.log的入参值,也就是"hello " + validate()的拼接结果 - 计算拼接结果时需要先拿到右操作数
validate()的返回值,因此会触发validate()函数优先执行 validate()内部先执行console.log("ho "),控制台输出ho,随后返回字符串hi- 拼接操作的两个操作数都已得到结果:
"hello " + "hi"="hello hi" - 最后执行外层的
console.log("hello hi"),控制台输出hello hi
补充验证示例
如果有多个函数作为操作数参与计算,会按照从左到右的顺序依次求值:
function getA() { console.log('计算getA') return 1 } function getB() { console.log('计算getB') return 2 } console.log(getA() + getB()) // 输出顺序:计算getA → 计算getB → 3
内容的提问来源于stack exchange,提问作者anandsr-dev
相关产品推荐
相关产品推荐

