为什么JavaScript的console.log内方法输出早于传入的文本内容?
问题原因
你遇到的输出顺序问题由两点共同导致:
- JavaScript执行函数时,会先计算所有参数的取值,再把计算后的参数传入函数体执行。执行
console.log("Output the method\n", myComp.outputConsole());时,引擎会先执行myComp.outputConsole()得到参数值,再执行外层的console.log - 你定义的
outputConsole方法内部直接调用了console.log,执行方法时就会立刻打印内容,且方法没有手动写返回值,默认返回undefined。所以执行时会先打印方法内部的日志,再打印外层console.log的前缀字符串和undefined
存在的问题
- 方法设计逻辑矛盾:如果你希望
outputConsole给外层console.log提供打印内容,就不应该在方法内部执行打印逻辑;如果你希望方法自行打印,就不应该把它作为参数传给另一个console.log - 实例化参数顺序错误:构造函数参数列表最后三项为
ramSize, diskSize, diskType,你传入的最后三项是"8.0 GB", "HDD", "750.0 GB",会导致diskSize和diskType的赋值结果完全相反
修复方案
方案1:修改方法返回待打印字符串
调整outputConsole逻辑,改为返回拼接好的字符串:
outputConsole() { return `${this.name} ${this.ramSize} ${this.color} ${this.diskSize}` }
原有打印语句无需修改,即可正常按顺序输出。
方案2:拆分打印逻辑
如果不想修改原有方法,直接拆分打印语句即可:
console.log("Output the method\n"); myComp.outputConsole();
参数顺序修复
调整实例化时的最后三个参数顺序:
const myComp = new Computer( "Pranav's HP Laptop", "HP-envym6-1225dx", 15, "Grey", "Intel i5", "3rd-Generation", "2.2GHz", "8.0 GB", "750.0 GB", "HDD" );
内容的提问来源于stack exchange,提问作者Tom Livingston
相关产品推荐
相关产品推荐

