在线工具AI 产品汇

工具箱 › 开发 › JS 演练场

JavaScript 演练场

写一段 JavaScript 在浏览器本地执行:代码跑在临时 Worker 里,捕获 console 的 log/warn/error 输出、显示 return 返回值,支持 1 至 10 秒超时与手动中止,死循环不会卡住页面,全程不发任何请求。

—状态
—耗时
0输出行

代码跑在哪个环境里

每次运行都新建一个 <code>Worker</code>,代码在那里执行,所以死循环不会卡住页面,超时后直接被丢弃 —— 这一点比在页面里直接 <code>eval</code> 强得多。

Worker 里没有 DOM、没有 <code>window</code>,也拿不到页面的变量;<code>fetch</code>、<code>XMLHttpRequest</code>、<code>localStorage</code> 同样不可用。要做这些请回自己的项目里跑。

输出是怎么来的

接管了 Worker 里的 <code>console</code>,四个级别(log / info / warn / error)都会按调用顺序进输出区,字符串参数原样打印、其它参数用 JSON 风格展开。

<code>return</code> 的返回值不算 console 输出,会以 <code>=&gt;</code> 开头单独一行,方便看函数结果。

常见差异

现代浏览器的 ES2020 之后语法都能用,<code>await</code> 也可以直接写在顶层(代码被包在 async 函数里);但 Worker 全局没有 <code>document</code>,任何 <code>document.getElementById</code> 都会抛 <code>ReferenceError</code>。

<code>setTimeout</code> 是异步的:代码主体跑完就返回了,后面排队的定时器要等 Worker 被复用或页面刷新才可能执行 —— 想看到定时器输出,要么 <code>await</code>,要么在末尾 <code>return</code> 一个 Promise。

常见问题

代码会上传吗?

不会。代码先被拼成一个 Blob URL 交给本页创建的 Worker,全程不离开浏览器,关掉页面就没了。

超时是怎么算的?

从点运行开始计时(不含拼 Worker 的时间),到点直接把 Worker 终止掉。终止后里面排队的定时器与 Promise 全部作废,不会再往输出区追加内容。

为什么访问不了 DOM?

Worker 里没有 document,这是浏览器的隔离设计。要跑页面相关的代码请在自己的项目里用 iframe + postMessage,或直接开控制台。