You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何使用console.log会改变JavaScript函数的输出值?

为什么添加console.log会改变JavaScript函数的输出结果?

你原本认为console.log不会改变函数输出,但实际添加后结果完全不同:

添加console.log的函数:

function S(e) {
    for (var t = '', n = e.charCodeAt(0), i = 1; i < e.length; ++i)
            console.log(i, n ); 
        t += String.fromCharCode(e.charCodeAt(i) ^ ((i + n) & 127));
 
    return t;
}

S(":h_OWO4a'16*4g.&8kn") // 返回 'M'

移除console.log后的函数:

function S(e) {
    for (var t = '', n = e.charCodeAt(0), i = 1; i < e.length; ++i)
        t += String.fromCharCode(e.charCodeAt(i) ^ ((i + n) & 127));
 
    return t;
}

S(":h_OWO4a'16*4g.&8kn") // 返回 'Script error for "'

问题根源:缩进导致的for循环逻辑错误

JavaScript里,for循环如果没有用大括号{}包裹代码块,只会执行紧跟在循环条件后的第一行语句,剩下的语句和循环完全无关。

  • 第一个函数中,console.log(i, n );是紧跟for的语句,所以每次循环只执行这一行;而下面的t += ...不在循环体内,只会在循环结束后执行一次。此时循环结束时i等于e.length,e.charCodeAt(i)返回undefined,经过异或运算后得到对应字符'M',所以最终返回单个字符。
  • 第二个函数中,t += ...直接紧跟for,属于循环体内容,每次循环都会执行,所以会逐个处理输入字符串的每个字符,最终得到完整的解密结果'Script error for "'。

本质就是加console.log时的缩进错误,把原本属于循环体的代码踢出了循环,导致函数逻辑彻底改变。

内容的提问来源于stack exchange,提问作者Brain -

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 07:15:09