JavaScript代码执行超时(1500ms)问题排查求助
JavaScript代码超时问题排查
执行以下代码时控制台输出Timeout exceeded, make sure your code is executed no more than 1500ms.,代码如下:
console.log('hlo') let obj = { bird: "yguhdjn", color: 'blue', eat:'insect' } function GetObjectKeys(obj, keys) { for (let key in obj) { if (typeof obj[key] == "object") { GetObjectKeys(obj[key], keys); } else { keys.push(key); } return keys; console.log(obj[key]) } }
问题分析
- return语句位置错误:
return keys;写在for...in循环内部,导致循环仅处理第一个键(bird)就直接返回函数,后续的键(color、eat)完全不会被处理,同时return后的console.log(obj[key])永远不会执行。 - 未处理
keys参数的初始值:如果调用GetObjectKeys时未传入keys数组,keys会是undefined,执行keys.push(key)时会抛出Cannot read property 'push' of undefined错误,可能导致代码异常阻塞。 - 潜在的无限递归风险:如果对象存在循环引用(比如
obj.self = obj),当前递归逻辑会无限调用GetObjectKeys,直接触发超时或栈溢出。你提供的示例对象虽无循环引用,但如果实际运行的对象包含此类结构,会直接导致超时。 - 转义引号语法错误:原代码中的
"是HTML转义字符,直接运行会触发JavaScript语法错误,导致代码无法正常解析执行,部分运行环境可能将这种异常判定为超时。
修正后的代码
console.log('hlo') let obj = { bird: "yguhdjn", color: 'blue', eat:'insect' } function GetObjectKeys(obj, keys = []) { // 设置默认参数,避免keys为undefined for (let key in obj) { if (typeof obj[key] === "object" && obj[key] !== null) { // 排除null(typeof null === 'object') GetObjectKeys(obj[key], keys); } else { keys.push(key); } console.log(obj[key]); // 移到return前,确保能执行 } return keys; // 移到循环外部,确保所有键都处理完再返回 } // 调用示例 const result = GetObjectKeys(obj); console.log(result); // 输出 ["bird", "color", "eat"]
内容的提问来源于stack exchange,提问作者Navjot Singh
相关产品推荐
相关产品推荐

