diff --git a/files/zh-cn/_redirects.txt b/files/zh-cn/_redirects.txt
index 38e8ba5e86d3bb..1380fbf848ab74 100644
--- a/files/zh-cn/_redirects.txt
+++ b/files/zh-cn/_redirects.txt
@@ -1909,7 +1909,7 @@
/zh-CN/docs/Web/API/WindowOrWorkerGlobalScope/indexedDB /zh-CN/docs/Web/API/Window/indexedDB
/zh-CN/docs/Web/API/WindowOrWorkerGlobalScope/isSecureContext /zh-CN/docs/Web/API/Window/isSecureContext
/zh-CN/docs/Web/API/WindowOrWorkerGlobalScope/origin /zh-CN/docs/Web/API/Window/origin
-/zh-CN/docs/Web/API/WindowOrWorkerGlobalScope/queueMicrotask /zh-CN/docs/Web/API/queueMicrotask
+/zh-CN/docs/Web/API/WindowOrWorkerGlobalScope/queueMicrotask /zh-CN/docs/Web/API/Window/queueMicrotask
/zh-CN/docs/Web/API/WindowOrWorkerGlobalScope/setInterval /zh-CN/docs/Web/API/setInterval
/zh-CN/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout /zh-CN/docs/Web/API/setTimeout
/zh-CN/docs/Web/API/WindowTimers/clearTimeout /zh-CN/docs/Web/API/clearTimeout
@@ -2034,9 +2034,11 @@
/zh-CN/docs/Web/API/notification/onshow /zh-CN/docs/Web/API/Notification/show_event
/zh-CN/docs/Web/API/origin /zh-CN/docs/Web/API/Window/origin
/zh-CN/docs/Web/API/performance_property /zh-CN/docs/Web/API/Window/performance
+/zh-CN/docs/Web/API/queueMicrotask /zh-CN/docs/Web/API/Window/queueMicrotask
/zh-CN/docs/Web/API/range.getBoundingClientRect /zh-CN/docs/Web/API/Range/getBoundingClientRect
/zh-CN/docs/Web/API/range.startOffset /zh-CN/docs/Web/API/Range/startOffset
/zh-CN/docs/Web/API/range.surroundContents /zh-CN/docs/Web/API/Range/surroundContents
+/zh-CN/docs/Web/API/structuredClone /zh-CN/docs/Web/API/Window/structuredClone
/zh-CN/docs/Web/API/window.requestAnimationFrame /zh-CN/docs/Web/API/Window/requestAnimationFrame
/zh-CN/docs/Web/API/剪贴板_API /zh-CN/docs/Web/API/Clipboard_API
/zh-CN/docs/Web/API/开发式平台 /zh-CN/docs/Web/API/Push_API
diff --git a/files/zh-cn/_wikihistory.json b/files/zh-cn/_wikihistory.json
index 766f8f134f0066..ca036768227942 100644
--- a/files/zh-cn/_wikihistory.json
+++ b/files/zh-cn/_wikihistory.json
@@ -15561,6 +15561,10 @@
"modified": "2019-03-24T00:15:16.672Z",
"contributors": ["guoyi", "jjc", "teoli", "khalid32", "ziyunfei"]
},
+ "Web/API/Window/queueMicrotask": {
+ "modified": "2020-10-15T22:23:11.878Z",
+ "contributors": ["RainSlide"]
+ },
"Web/API/Window/rejectionhandled_event": {
"modified": "2020-10-15T22:26:00.037Z",
"contributors": ["mengli404"]
@@ -16280,10 +16284,6 @@
"Hawkeyes_Wind"
]
},
- "Web/API/queueMicrotask": {
- "modified": "2020-10-15T22:23:11.878Z",
- "contributors": ["RainSlide"]
- },
"Web/API/setInterval": {
"modified": "2020-11-25T18:16:55.949Z",
"contributors": [
diff --git a/files/zh-cn/glossary/deep_copy/index.md b/files/zh-cn/glossary/deep_copy/index.md
index 21da178a919784..2e891413e2c194 100644
--- a/files/zh-cn/glossary/deep_copy/index.md
+++ b/files/zh-cn/glossary/deep_copy/index.md
@@ -40,7 +40,7 @@ let ingredients_list_deepcopy = JSON.parse(JSON.stringify(ingredients_list));
由于深拷贝与其源对象不共享引用,因此对深拷贝所做的任何更改都不会影响源对象。
```js
-// 改变 ingredients_list_deepcopy 中 'list' 属性的值。
+// 改变 ingredients_list_deepcopy 中“list”属性的值。
ingredients_list_deepcopy[1].list = ["rice flour", "water"];
// ingredients_list 的“list”属性不会发生变化。
console.log(ingredients_list[1].list);
@@ -49,9 +49,11 @@ console.log(ingredients_list[1].list);
然而,虽然上面代码中的对象足够简单,可以[序列化](/zh-CN/docs/Glossary/Serialization),但许多 JavaScript 对象根本不能序列化——例如,[函数](/zh-CN/docs/Web/JavaScript/Guide/Functions)(带有闭包)、[Symbol](/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Symbol)、在 [HTML DOM API](/zh-CN/docs/Web/API/HTML_DOM_API) 中表示 HTML 元素的对象、递归数据以及许多其他对象。在这种情况下,调用 `JSON.stringify()` 来序列化对象将会失败。所以没有办法对这些对象进行深拷贝。
-你也可以使用 Web API [`structuredClone()`](/zh-CN/docs/Web/API/structuredClone) 来创建深拷贝。`structuredClone()` 的优点是允许源代码中的[可转移对象](/zh-CN/docs/Web/API/Web_Workers_API/Transferable_objects)被*转移*到新的副本,而不仅仅是克隆。它还能处理更多的数据类型,如 `Error`。但是请注意,`structuredClone()` 不是 JavaScript 语言本身的特性——相反,它是浏览器和任何其他实现了 [`window`](/zh-CN/docs/Web/API/Window) 这样全局对象的 JavaScript 运行时的一个特性。调用 `structuredClone()` 来克隆一个不可序列化的对象,与调用 `JSON.stringify()` 来序列化一个不可序列化的对象一样,会失败。
+你也可以使用 Web API {{DOMxRef("Window.structuredClone", "structuredClone()")}} 来创建深拷贝。`structuredClone()` 的优点是允许源代码中的[可转移对象](/zh-CN/docs/Web/API/Web_Workers_API/Transferable_objects)被*转移*到新的副本,而不仅仅是克隆。它还能处理更多的数据类型,如 `Error`。但是请注意,`structuredClone()` 不是 JavaScript 语言本身的特性——相反,它是浏览器和任何其他实现了 [`window`](/zh-CN/docs/Web/API/Window) 这样全局对象的 JavaScript 运行时的一个特性。调用 `structuredClone()` 来克隆一个不可序列化的对象,与调用 `JSON.stringify()` 来序列化一个不可序列化的对象一样,会失败。
## 参见
-- {{glossary("Shallow copy", "浅拷贝")}}
-- [`window.structuredClone()`](/zh-CN/docs/Web/API/structuredClone)
+- 相关术语:
+ - {{glossary("Shallow copy", "浅拷贝")}}
+ - {{DOMxRef("Window.structuredClone()")}}
+ - {{DOMxRef("WorkerGlobalScope.structuredClone()")}}
diff --git a/files/zh-cn/glossary/serializable_object/index.md b/files/zh-cn/glossary/serializable_object/index.md
index 31e41240ca9996..e7cc6872db9a63 100644
--- a/files/zh-cn/glossary/serializable_object/index.md
+++ b/files/zh-cn/glossary/serializable_object/index.md
@@ -5,7 +5,7 @@ slug: Glossary/Serializable_object
{{GlossarySidebar}}
-**可序列化对象**(Serializable object)是可以在任何 JavaScript 环境(领域,realm)中序列化、反序列化的对象。例如,这允许将此类对象存储在磁盘上并在以后进行恢复,或使用 {{domxref("structuredClone()")}} 对它们进行拷贝,又或者使用 {{domxref("DedicatedWorkerGlobalScope.postMessage()")}} 在 Worker 之间共享它们。
+**可序列化对象**(Serializable object)是可以在任何 JavaScript 环境(领域,realm)中序列化、反序列化的对象。例如,这允许将此类对象存储在磁盘上并在以后进行恢复,或使用 {{DOMxRef("Window.structuredClone", "structuredClone()")}} 对它们进行拷贝,又或者使用 {{domxref("DedicatedWorkerGlobalScope.postMessage()")}} 在 Worker 之间共享它们。
序列化可能不包括原始对象的所有属性和其他方面的内容。例如,对 {{domxref("DOMException")}} 的序列化必须包含 `name` 和 `message` 属性,但是否包含其他属性则取决于具体实现。因此,反序列化的对象并不一定是与原始对象相同的拷贝。但是,反序列化得到的新的对象将会是一个{{glossary("deep copy", "深拷贝")}},因此任何从原始对象序列化并反序列化到新的对象的属性都不会和原始对象共享任何引用。
diff --git a/files/zh-cn/web/api/domexception/index.md b/files/zh-cn/web/api/domexception/index.md
index 26c7c22f4a0018..fbc44644776445 100644
--- a/files/zh-cn/web/api/domexception/index.md
+++ b/files/zh-cn/web/api/domexception/index.md
@@ -9,7 +9,7 @@ slug: Web/API/DOMException
每个异常都有一个**名称**(name),一个采用驼峰命名法的简短字符串,用于描述识别错误或异常情况。
-`DOMException` 是一个{{Glossary("Serializable object","可序列化对象")}},因此可以使用 {{domxref("structuredClone()")}} 克隆,或使用 {{domxref("Worker.postMessage()", "postMessage()")}} 在 [Worker](/zh-CN/docs/Web/API/Worker) 之间复制。
+`DOMException` 是一个{{Glossary("Serializable object","可序列化对象")}},因此可以使用 {{DOMxRef("Window.structuredClone", "structuredClone()")}} 克隆,或使用 {{domxref("Worker.postMessage()", "postMessage()")}} 在 [Worker](/zh-CN/docs/Web/API/Worker) 之间复制。
## 构造函数
diff --git a/files/zh-cn/web/api/html_dom_api/microtask_guide/in_depth/index.md b/files/zh-cn/web/api/html_dom_api/microtask_guide/in_depth/index.md
index 7545b350abca02..80dae2da6338f6 100644
--- a/files/zh-cn/web/api/html_dom_api/microtask_guide/in_depth/index.md
+++ b/files/zh-cn/web/api/html_dom_api/microtask_guide/in_depth/index.md
@@ -144,7 +144,7 @@ greetUser("Veronica");
## 参见
- [微任务指南](/zh-CN/docs/Web/API/HTML_DOM_API/Microtask_guide)
-- {{domxref("queueMicrotask()")}}
+- {{domxref("Window.queueMicrotask()")}}
- [异步 JavaScript](/zh-CN/docs/Learn/JavaScript/Asynchronous)
- [异步 JavaScript 简介](/zh-CN/docs/Learn/JavaScript/Asynchronous/Introducing)
- [合作的异步 JavaScript:超时和间隔](/zh-CN/docs/Learn/JavaScript/Asynchronous)
diff --git a/files/zh-cn/web/api/html_dom_api/microtask_guide/index.md b/files/zh-cn/web/api/html_dom_api/microtask_guide/index.md
index 0a8247cb103b4f..04adaff6dd73ee 100644
--- a/files/zh-cn/web/api/html_dom_api/microtask_guide/index.md
+++ b/files/zh-cn/web/api/html_dom_api/microtask_guide/index.md
@@ -7,7 +7,7 @@ slug: Web/API/HTML_DOM_API/Microtask_guide
一个**微任务**(microtask)就是一个简短的函数,当创建该微任务的函数执行之后,*并且*只有当 Javascript 调用栈为空,而控制权尚未返还给被{{Glossary("user agent", "用户代理")}}用来驱动脚本执行环境的事件循环之前,该微任务才会被执行。事件循环既可能是浏览器的主事件循环也可能是被一个 [web worker](/zh-CN/docs/Web/API/Web_Workers_API) 所驱动的事件循环。这使得给定的函数在没有其他脚本执行干扰的情况下运行,也保证了微任务能在用户代理有机会对该微任务带来的行为做出反应之前运行。
-JavaScript 中的 [promise](/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise) 和 [Mutation Observer API](/zh-CN/docs/Web/API/MutationObserver) 都使用微任务队列去运行它们的回调函数,但当能够推迟工作直到当前事件循环过程完结时,也是可以执行微任务的时机。为了允许第三方库、框架、polyfill 能使用微任务,在 {{domxref("Window")}} 和 {{domxref("Worker")}} 接口上暴露了 {{domxref("queueMicrotask()")}} 方法。
+JavaScript 中的 [promise](/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise) 和 [Mutation Observer API](/zh-CN/docs/Web/API/MutationObserver) 都使用微任务队列去运行它们的回调函数,但当能够推迟工作直到当前事件循环过程完结时,也是可以执行微任务的时机。为了允许第三方库、框架、polyfill 能使用微任务,在 {{domxref("Window")}} 和 {{domxref("WorkerGlobalScope")}} 接口上暴露了 {{domxref("Window.queueMicrotask()", "queueMicrotask()")}} 方法。
## 任务 vs 微任务
@@ -33,7 +33,7 @@ JavaScript 中的 [promise](/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/
首先,每当一个任务存在,事件循环都会检查该任务是否正把控制权交给其他 JavaScript 代码。如若不然,事件循环就会运行微任务队列中的所有微任务。接下来微任务循环会在事件循环的每次迭代中被处理多次,包括处理完事件和其他回调之后。
-其次,如果一个微任务通过调用 {{domxref("queueMicrotask()")}}, 向队列中加入了更多的微任务,则那些新加入的微任务 _会早于下一个任务运行_。这是因为事件循环会持续调用微任务直至队列中没有留存的,即使是在有更多微任务持续被加入的情况下。
+其次,如果一个微任务通过调用 {{domxref("Window.queueMicrotask()", "queueMicrotask()")}},向队列中加入了更多的微任务,则那些新加入的微任务*会早于下一个任务运行*。这是因为事件循环会持续调用微任务直至队列中没有留存的,即使是在有更多微任务持续被加入的情况下。
> [!WARNING]
> 因为微任务自身可以入列更多的微任务,且事件循环会持续处理微任务直至队列为空,那么就存在一种使得事件循环无尽处理微任务的真实风险。如何处理递归增加微任务是要谨慎而行的。
@@ -44,11 +44,11 @@ JavaScript 中的 [promise](/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/
### 入列微任务
-就其本身而言,应该使用微任务的典型情况,要么只有在没有其他办法的时候,要么是当创建框架或库时需要使用微任务达成其功能。虽然在过去要使得入列微任务成为可能有可用的技巧(比如创建一个立即 resolve 的 promise),但新加入的 {{domxref("queueMicrotask()")}} 方法增加了一种标准的方式,可以安全的引入微任务而避免使用额外的技巧。
+就其本身而言,应该使用微任务的典型情况,要么只有在没有其他办法的时候,要么是当创建框架或库时需要使用微任务达成其功能。虽然在过去要使得入列微任务成为可能有可用的技巧(比如创建一个立即兑现的 promise),但新加入的 {{domxref("Window.queueMicrotask()", "queueMicrotask()")}} 方法增加了一种标准的方式,可以安全的引入微任务而避免使用额外的技巧。
通过引入 `queueMicrotask()`,由晦涩地使用 promise 去创建微任务而带来的风险就可以被避免了。举例来说,当使用 promise 创建微任务时,由回调抛出的异常被报告为 rejected promises 而不是标准异常。同时,创建和销毁 promise 带来了事件和内存方面的额外开销,这是正确入列微任务的函数应该避免的。
-简单的传入一个 JavaScript {{jsxref("Function")}} ,以在 `queueMicrotask()` 方法中处理微任务时供其上下文调用即可;取决于当前执行上下文, `queueMicrotask()` 以定义的形式被暴露在 {{domxref("Window")}} 或 {{domxref("Worker")}} 接口上。
+简单的传入一个 JavaScript {{jsxref("Function")}},以在 `queueMicrotask()` 方法中处理微任务时供其上下文调用即可;取决于当前执行上下文,`queueMicrotask()` 以定义的形式被暴露在 {{domxref("Window")}} 或 {{domxref("Worker")}} 接口上。
```js
queueMicrotask(() => {
@@ -175,9 +175,7 @@ let sendMessage = (message) => {
};
```
-当 `sendMessage()`
-
-被调用时,指定的消息首先被推入消息队列数组。接着事情就变得有趣了。
+当 `sendMessage()` 被调用时,指定的消息首先被推入消息队列数组。接着事情就变得有趣了。
如果我们刚加入数组的消息是第一条,就入列一个将会发送一个批处理的微任务。照旧,当 JavaScript 执行路径到达顶层,恰在运行回调之前,那个微任务将会执行。这意味着之后的间歇期内造成的对 `sendMessage()` 的任何调用都会将其各自的消息推入消息队列,但囿于入列微任务逻辑之前的数组长度检查,不会有新的微任务入列。
@@ -204,7 +202,7 @@ let logElem = document.getElementById("log");
let log = (s) => (logElem.innerHTML += s + "
");
```
-在下面的代码中,我们看到对 {{domxref("queueMicrotask()")}} 的一次调用被用来调度一个微任务以使其运行。这次调用包含了 `log()`,一个简单的向屏幕输出文字的自定义函数。
+在下面的代码中,我们看到对 {{domxref("Window.queueMicrotask()", "queueMicrotask()")}} 的一次调用被用来调度一个微任务以使其运行。这次调用包含了 `log()`,一个简单的向屏幕输出文字的自定义函数。
```js
log("Before enqueueing the microtask");
@@ -233,7 +231,7 @@ let logElem = document.getElementById("log");
let log = (s) => (logElem.innerHTML += s + "
");
```
-在下面的代码中,我们看到对 {{domxref("queueMicrotask()")}} 的一次调用被用来调度一个微任务以使其运行。这次调用包含了 `log()`,一个简单的向屏幕输出文字的自定义函数。
+在下面的代码中,我们看到对 {{domxref("Window.queueMicrotask()", "queueMicrotask()")}} 的一次调用被用来调度一个微任务以使其运行。这次调用包含了 `log()`,一个简单的向屏幕输出文字的自定义函数。
以下代码调度了一个 0 毫秒后触发的 timeout,而后入列了一个微任务。前后被对 `log()` 的调用包住,输出附加的信息。
@@ -300,7 +298,7 @@ log("Main program exiting");
## 参见
- [In depth: Microtasks and the JavaScript runtime environment](/zh-CN/docs/Web/API/HTML_DOM_API/Microtask_guide/In_depth)
-- {{domxref("queueMicrotask()")}}
+- {{domxref("Window.queueMicrotask()", "queueMicrotask()")}}
- [Asynchronous JavaScript](/zh-CN/docs/Learn/JavaScript/Asynchronous)
- [General asynchronous programming concepts](/zh-CN/docs/Learn/JavaScript/Asynchronous/Concepts)
diff --git a/files/zh-cn/web/api/settimeout/index.md b/files/zh-cn/web/api/settimeout/index.md
index ffe5da1850c84f..53526cbf25c023 100644
--- a/files/zh-cn/web/api/settimeout/index.md
+++ b/files/zh-cn/web/api/settimeout/index.md
@@ -385,5 +385,6 @@ function clearMessage() {
- [`core-js` 中允许向回调函数传递参数的 `setTimeout` 版本的 polyfill](https://github.com/zloirock/core-js#settimeout-and-setinterval)
- {{domxref("clearTimeout")}}
- {{domxref("setInterval()")}}
-- {{domxref("window.requestAnimationFrame")}}
-- {{domxref("queueMicrotask()")}}
+- {{domxref("Window.requestAnimationFrame")}}
+- {{domxref("Window.queueMicrotask()")}}
+- {{domxref("WorkerGlobalScope.queueMicrotask()")}}
diff --git a/files/zh-cn/web/api/web_workers_api/functions_and_classes_available_to_workers/index.md b/files/zh-cn/web/api/web_workers_api/functions_and_classes_available_to_workers/index.md
index e3676dd8c0c74d..72c1641884a944 100644
--- a/files/zh-cn/web/api/web_workers_api/functions_and_classes_available_to_workers/index.md
+++ b/files/zh-cn/web/api/web_workers_api/functions_and_classes_available_to_workers/index.md
@@ -23,12 +23,12 @@ slug: Web/API/Web_Workers_API/Functions_and_classes_available_to_workers
- {{domxref("clearTimeout()")}}
- {{domxref("createImageBitmap()")}}
- {{domxref("WorkerGlobalScope.dump()", "dump()")}} {{non-standard_inline}}
-- {{domxref("fetch()")}}
-- {{domxref("queueMicrotask()")}}
+- {{domxref("WorkerGlobalScope.fetch()", "fetch()")}}
+- {{domxref("WorkerGlobalScope.queueMicrotask()", "queueMicrotask()")}}
- {{domxref("reportError()")}}
- {{domxref("setInterval()")}}
- {{domxref("setTimeout()")}}
-- {{domxref("structuredClone()")}}
+- {{DOMxRef("WorkerGlobalScope.structuredClone", "structuredClone()")}}
- {{domxref("DedicatedWorkerGlobalScope.requestAnimationFrame()", "requestAnimationFrame()")}}(仅专用 worker)
- {{domxref("DedicatedWorkerGlobalScope.cancelAnimationFrame()", "cancelAnimationFrame()")}}(仅专用 worker)
diff --git a/files/zh-cn/web/api/web_workers_api/index.md b/files/zh-cn/web/api/web_workers_api/index.md
index 9a2279b3599a68..803ec4411eb2e4 100644
--- a/files/zh-cn/web/api/web_workers_api/index.md
+++ b/files/zh-cn/web/api/web_workers_api/index.md
@@ -44,12 +44,12 @@ worker 在一个与当前 {{DOMxRef("window")}} 不同的全局上下文中运
- {{domxref("clearTimeout()")}}
- {{domxref("createImageBitmap()")}}
- {{domxref("WorkerGlobalScope.dump()", "dump()")}} {{non-standard_inline}}
-- {{domxref("fetch()")}}
-- {{domxref("queueMicrotask()")}}
+- {{domxref("WorkerGlobalScope.fetch()", "fetch()")}}
+- {{domxref("WorkerGlobalScope.queueMicrotask()", "queueMicrotask()")}}
- {{domxref("reportError()")}}
- {{domxref("setInterval()")}}
- {{domxref("setTimeout()")}}
-- {{domxref("structuredClone()")}}
+- {{DOMxRef("WorkerGlobalScope.structuredClone", "structuredClone()")}}
- {{domxref("DedicatedWorkerGlobalScope.requestAnimationFrame()", "requestAnimationFrame()")}}(仅专用 worker)
- {{domxref("DedicatedWorkerGlobalScope.cancelAnimationFrame()", "cancelAnimationFrame()")}}(仅专用 worker)
diff --git a/files/zh-cn/web/api/web_workers_api/structured_clone_algorithm/index.md b/files/zh-cn/web/api/web_workers_api/structured_clone_algorithm/index.md
index bab601b9a265da..17b2776346d5d7 100644
--- a/files/zh-cn/web/api/web_workers_api/structured_clone_algorithm/index.md
+++ b/files/zh-cn/web/api/web_workers_api/structured_clone_algorithm/index.md
@@ -47,7 +47,8 @@ slug: Web/API/Web_Workers_API/Structured_clone_algorithm
- [HTML 规范:安全地传递结构化数据](https://html.spec.whatwg.org/multipage/infrastructure.html#safe-passing-of-structured-data)
- [可转移对象](/zh-CN/docs/Web/API/Web_Workers_API/Transferable_objects)
-- {{domxref("structuredClone()")}}
+- {{DOMxRef("Window.structuredClone()")}}
+- {{DOMxRef("WorkerGlobalScope.structuredClone()")}}
- {{domxref("window.history")}}
- {{domxref("window.postMessage()")}}
- [Web Worker](/zh-CN/docs/Web/API/Web_Workers_API)
diff --git a/files/zh-cn/web/api/web_workers_api/transferable_objects/index.md b/files/zh-cn/web/api/web_workers_api/transferable_objects/index.md
index 52670208943a2d..6579489cb3a480 100644
--- a/files/zh-cn/web/api/web_workers_api/transferable_objects/index.md
+++ b/files/zh-cn/web/api/web_workers_api/transferable_objects/index.md
@@ -9,7 +9,7 @@ slug: Web/API/Web_Workers_API/Transferable_objects
*可转移对象*通常用于共享资源,该资源一次仅能安全地暴露在一个 JavaScript 线程中。例如,{{jsxref("ArrayBuffer")}} 是一个拥有内存块的可转移对象。当此类缓冲区(buffer)在线程之间传输时,相关联的内存资源将从原始的缓冲区分离出来,并且附加到新线程创建的缓冲区对象中。原始线程中的缓冲区对象不再可用,因为它不再拥有属于自己的内存资源了。
-使用 {{domxref("structuredClone()")}} 创建对象的深层拷贝时,也可以使用转移。克隆操作后,传输的资源将被移动到克隆的对象,而不是复制。
+使用 {{DOMxRef("WorkerGlobalScope.structuredClone", "structuredClone()")}} 创建对象的深层拷贝时,也可以使用转移。克隆操作后,传输的资源将被移动到克隆的对象,而不是复制。
使用转移对象资源的机制取决于对象自身。例如,当 {{jsxref("ArrayBuffer")}} 在线程之间转移时,它指向的内存资源*实际上*以快速且高效的零拷贝操作在上下文之间移动。其他对象可以通过拷贝关联的资源,然后将它从旧的上下文中删除来转移它。
@@ -34,7 +34,7 @@ console.log(uInt8Array.byteLength); // 0
### 在进行克隆操作时转移
-以下代码展示了 {{domxref("structuredClone()")}} 操作,将底层缓冲区从原始对象复制到克隆对象(`clone`)。
+以下代码展示了 `structuredClone()` 操作,将底层缓冲区从原始对象复制到克隆对象(`clone`)。
```js
const original = new Uint8Array(1024);
diff --git a/files/zh-cn/web/api/queuemicrotask/index.md b/files/zh-cn/web/api/window/queuemicrotask/index.md
similarity index 58%
rename from files/zh-cn/web/api/queuemicrotask/index.md
rename to files/zh-cn/web/api/window/queuemicrotask/index.md
index f2c72f10b67743..397d190ee38997 100644
--- a/files/zh-cn/web/api/queuemicrotask/index.md
+++ b/files/zh-cn/web/api/window/queuemicrotask/index.md
@@ -1,30 +1,32 @@
---
-title: queueMicrotask()
-slug: Web/API/queueMicrotask
+title: Window:queueMicrotask() 方法
+slug: Web/API/Window/queueMicrotask
+l10n:
+ sourceCommit: 5fc275a2cb01ea3c361d6a0af057e96a00122984
---
{{APIRef("HTML DOM")}}
-{{domxref("Window")}} 或 {{domxref("Worker")}} 接口的 **`queueMicrotask()`** 方法,将微任务加入队列以在控制返回浏览器的事件循环之前的安全时间执行。
+{{domxref("Window")}} 接口的 **`queueMicrotask()`** 方法,将微任务加入队列以在控制返回浏览器的事件循环之前的安全时间执行。
微任务是一个简短的函数,它将在当前任务完成其工作后运行,并且在执行上下文的控制权返回到浏览器的事件循环之前没有其他代码等待运行时运行。
它让你的代码在运行时不会干扰任何可能具有更高优先级的代码的运行,但在浏览器重新获得对执行上下文的控制之前,这可能取决于你需要完成的工作。你可以在我们的[微任务指南](/zh-CN/docs/Web/API/HTML_DOM_API/Microtask_guide)中了解更多关于如何使用微任务以及选择这样做的原因。
-微任务的重要性在于它能够以特定顺序异步执行任务。查看[在 JavaScript 中通过 queueMicrotask() 使用微任务](/zh-CN/docs/Web/API/HTML_DOM_API/Microtask_guide)的详情。
+微任务的重要性在于它能够以特定顺序异步执行任务。参见[在 JavaScript 中通过 `queueMicrotask()` 使用微任务](/zh-CN/docs/Web/API/HTML_DOM_API/Microtask_guide)以了解更多信息。
微任务对于需要执行最后阶段的任务或其他在渲染之前的任务的库和框架特别有用。
## 语法
-```plain
-queueMicrotask(() => {/* ... */});
+```js-nolint
+queueMicrotask(callback)
```
### 参数
- `function`
- - : 当浏览器引擎确定可以安全调用你的代码时执行的 {{jsxref("function")}}。微任务(microtask)的执行顺序在所有进行中的任务(pending task)完成之后,在对浏览器的事件循环产生控制(yielding control to the browser's event loop)之前。
+ - : 当浏览器引擎确定可以安全调用你的代码时执行的 {{jsxref("function")}}。微任务(microtask)的执行顺序在所有进行中的任务(pending task)完成之后,在对浏览器的事件循环产生控制之前。
### 返回值
@@ -38,7 +40,7 @@ queueMicrotask(() => {
});
```
-来自 [`queueMicrotask` 的规范文档:](https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#microtask-queuing)
+来自 [queueMicrotask 的规范](https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#microtask-queuing):
```js
MyElement.prototype.loadData = function (url) {
@@ -69,8 +71,9 @@ MyElement.prototype.loadData = function (url) {
## 参见
-- [Polyfill of `queueMicrotask()` in `core-js`](https://github.com/zloirock/core-js#queuemicrotask)
-- [Using microtasks in JavaScript with queueMicrotask()](/zh-CN/docs/Web/API/HTML_DOM_API/Microtask_guide)
-- [Asynchronous JavaScript](/zh-CN/docs/Learn/JavaScript/Asynchronous)
-- [queueMicrotask explainer](https://github.com/fergald/docs/blob/master/explainers/queueMicrotask.md)
-- [Tasks, microtasks, queues and schedules](https://jakearchibald.com/2015/tasks-microtasks-queues-and-schedules/) by Jake Archibald
+- {{domxref("WorkerGlobalScope.queueMicrotask()")}}
+- [`core-js` 中 `queueMicrotask()` 的 polyfill](https://github.com/zloirock/core-js#queuemicrotask)
+- [在 JavaScript 中通过 queueMicrotask() 使用微任务](/zh-CN/docs/Web/API/HTML_DOM_API/Microtask_guide)
+- [异步 JavaScript](/zh-CN/docs/Learn/JavaScript/Asynchronous)
+- [queueMicrotask 的解释](https://github.com/fergald/docs/blob/master/explainers/queueMicrotask.md)
+- [任务、微任务、队列和调度](https://jakearchibald.com/2015/tasks-microtasks-queues-and-schedules/)(作者:Jake Archibald)
diff --git a/files/zh-cn/web/api/structuredclone/index.md b/files/zh-cn/web/api/window/structuredclone/index.md
similarity index 54%
rename from files/zh-cn/web/api/structuredclone/index.md
rename to files/zh-cn/web/api/window/structuredclone/index.md
index 5b3d155b80e6e9..374222c1007204 100644
--- a/files/zh-cn/web/api/structuredclone/index.md
+++ b/files/zh-cn/web/api/window/structuredclone/index.md
@@ -1,11 +1,13 @@
---
-title: structuredClone()
-slug: Web/API/structuredClone
+title: Window:structuredClone() 方法
+slug: Web/API/Window/structuredClone
+l10n:
+ sourceCommit: 8b6cec0ceff01e7a9d6865cf5306788e15cce4b8
---
-{{APIRef("HTML DOM")}}{{AvailableInWorkers}}
+{{APIRef("HTML DOM")}}
-全局的 **`structuredClone()`** 方法使用[结构化克隆算法](/zh-CN/docs/Web/API/Web_Workers_API/Structured_clone_algorithm)将给定的值进行[深拷贝](/zh-CN/docs/Glossary/Deep_copy)。
+{{domxref("Window")}} 接口的 **`structuredClone()`** 方法使用[结构化克隆算法](/zh-CN/docs/Web/API/Web_Workers_API/Structured_clone_algorithm)将给定的值进行{{Glossary("deep copy", "深拷贝")}}。
该方法还支持把原值中的[可转移对象](/zh-CN/docs/Web/API/Web_Workers_API/Transferable_objects)_转移_(而不是拷贝)到新对象上。可转移对象与原始对象分离并附加到新对象;它们将无法在原始对象中被访问。
@@ -13,59 +15,58 @@ slug: Web/API/structuredClone
```js-nolint
structuredClone(value)
-structuredClone(value, { transfer })
+structuredClone(value, options)
```
### 参数
- `value`
- : 被克隆的对象。可以是任何[结构化克隆支持的类型](/zh-CN/docs/Web/API/Web_Workers_API/Structured_clone_algorithm#支持的类型)。
-- `transfer` {{optional_inline}}
- - : 是一个[可转移对象](/zh-CN/docs/Web/API/Web_Workers_API/Transferable_objects)的数组,里面的 `值` 并没有被克隆,而是被转移到被拷贝对象上。
+- `options` {{optional_inline}}
+
+ - : 一个具有以下属性的对象:
+
+ - `transfer`
+ - : 一个[可转移对象](/zh-CN/docs/Web/API/Web_Workers_API/Transferable_objects)的数组,里面的对象将被移动而不是克隆到返回的对象上。
### 返回值
-返回值是原始`值`的[深拷贝](/zh-CN/docs/Glossary/Deep_copy)。
+原始值(`value`)的[深拷贝](/zh-CN/docs/Glossary/Deep_copy)。
### 异常
- `DataCloneError` {{domxref("DOMException")}}
- : 如果输入值的任一部分不可序列化,则抛出该异常。
-## 附注
+## 描述
-这个函数可以用来进行[深拷贝](/zh-CN/docs/Glossary/Deep_copy) JavaScript 变量。
-也支持循环引用,如下所示:
+这个函数可以用来进行[深拷贝](/zh-CN/docs/Glossary/Deep_copy) JavaScript 变量。也支持循环引用,如下所示:
```js
-// Create an object with a value and a circular reference to itself.
+// 创建一个具有值和对自身的循环引用的对象。
const original = { name: "MDN" };
original.itself = original;
-// Clone it
+// 对它进行克隆
const clone = structuredClone(original);
-console.assert(clone !== original); // the objects are not the same (not same identity)
-console.assert(clone.name === "MDN"); // they do have the same values
-console.assert(clone.itself === clone); // and the circular reference is preserved
+console.assert(clone !== original); // 对象并不相同(标识不同)
+console.assert(clone.name === "MDN"); // 它们具有相同的值
+console.assert(clone.itself === clone); // 且保留了循环引用
```
-### Transferring values
+### 转移值
-使用可选参数 `transfer` 里的值,可以使[可转移对象](/zh-CN/docs/Web/API/Web_Workers_API/Transferable_objects)(仅)被传递,不被克隆。
-传输导致原始对象(里的属性)无法继续使用。
+使用参数 `options` 的里 `transfer` 属性,可以使[可转移对象](/zh-CN/docs/Web/API/Web_Workers_API/Transferable_objects)(仅)被传递,不被克隆。转移会导致原始对象无法继续使用。
> [!NOTE]
-> 一个可能有用的场景是在保存 buffer 之前先异步的校验里面的数据。为了避免 buffer 在保存之前有其他修改,你可以先克隆这个 buffer 然后校验数据。为了防止意外的错误引用,在传输数据时,任何修改 buffer 的尝试都会失败。
+> 一个可能有用的场景是在保存缓冲区之前先异步的校验里面的数据。为了避免缓冲区在保存之前有其他修改,你可以先克隆这个缓冲区然后校验数据。为了防止意外的错误引用,在传输数据时,任何修改缓冲区的尝试都会失败。
-以下演示了如何把一个数组的属性转义到新对象。
-返回结果时,原始对象里的 `uInt8Array.buffer` 会被清除掉。
+以下演示了如何把一个数组的属性转移到新对象。返回结果时,原始对象里的 `uInt8Array.buffer` 会被清除掉。
```js
-var uInt8Array = new Uint8Array(1024 * 1024 * 16); // 16MB
-for (var i = 0; i < uInt8Array.length; ++i) {
- uInt8Array[i] = i;
-}
+// 16MB = 1024 * 1024 * 16
+const uInt8Array = Uint8Array.from({ length: 1024 * 1024 * 16 }, (v, i) => i);
const transferred = structuredClone(uInt8Array, {
transfer: [uInt8Array.buffer],
@@ -73,8 +74,7 @@ const transferred = structuredClone(uInt8Array, {
console.log(uInt8Array.byteLength); // 0
```
-你可以克隆任意数量的对象,并传输对象的任意子集。
-例如 以下代码会把 `arrayBuffer1` 作为值传输 但不是 `arrayBuffer2`。
+你可以克隆任意数量的对象,并转移对象的任意子集。例如,以下代码会把 `arrayBuffer1` 作为值转移(而不是 `arrayBuffer2`)。
```js
const transferred = structuredClone(
@@ -105,7 +105,7 @@ console.log(mushrooms1.amanita); // ["muscaria"]
### 转移一个对象
-在本示例中我们创建了一个 {{jsxref("ArrayBuffer")}} 然后克隆将它作为属性的对象,将它转移。我们可以使用克隆对象里的 buffer,但是如果我们尝试使用原对象的 buffer 的话就会产生异常。
+在本示例中我们创建了一个 {{jsxref("ArrayBuffer")}} 然后克隆将它作为属性的对象,将它转移。我们可以使用克隆对象里的缓冲区(buffer),但是如果我们尝试使用原对象的缓冲区的话就会产生异常。
```js
// 创建一个给定字节大小的 ArrayBuffer
diff --git a/files/zh-cn/web/api/workerglobalscope/queuemicrotask/index.md b/files/zh-cn/web/api/workerglobalscope/queuemicrotask/index.md
new file mode 100644
index 00000000000000..439668fe66f2d7
--- /dev/null
+++ b/files/zh-cn/web/api/workerglobalscope/queuemicrotask/index.md
@@ -0,0 +1,79 @@
+---
+title: WorkerGlobalScope:queueMicrotask() 方法
+slug: Web/API/WorkerGlobalScope/queueMicrotask
+l10n:
+ sourceCommit: 5fc275a2cb01ea3c361d6a0af057e96a00122984
+---
+
+{{APIRef("Web Workers API")}}{{AvailableInWorkers("worker")}}
+
+{{domxref("WorkerGlobalScope")}} 接口的 **`queueMicrotask()`** 方法,将微任务加入队列以在控制返回浏览器的事件循环之前的安全时间执行。
+
+微任务是一个简短的函数,它将在当前任务完成其工作后运行,并且在执行上下文的控制权返回到浏览器的事件循环之前没有其他代码等待运行时运行。
+
+它让你的代码在运行时不会干扰任何可能具有更高优先级的代码的运行,但在浏览器重新获得对执行上下文的控制之前,这可能取决于你需要完成的工作。你可以在我们的[微任务指南](/zh-CN/docs/Web/API/HTML_DOM_API/Microtask_guide)中了解更多关于如何使用微任务以及选择这样做的原因。
+
+微任务的重要性在于它能够以特定顺序异步执行任务。参见[在 JavaScript 中通过 `queueMicrotask()` 使用微任务](/zh-CN/docs/Web/API/HTML_DOM_API/Microtask_guide)以了解更多信息。
+
+微任务对于需要执行最后阶段的任务或其他在渲染之前的任务的库和框架特别有用。
+
+## 语法
+
+```js-nolint
+queueMicrotask(callback)
+```
+
+### 参数
+
+- `function`
+ - : 当浏览器引擎确定可以安全调用你的代码时执行的 {{jsxref("function")}}。微任务(microtask)的执行顺序在所有进行中的任务(pending task)完成之后,在对浏览器的事件循环产生控制之前。
+
+### 返回值
+
+无({{jsxref("undefined")}})。
+
+## 示例
+
+```js
+queueMicrotask(() => {
+ // 函数的内容
+});
+```
+
+来自 [queueMicrotask 的规范](https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#microtask-queuing):
+
+```js
+MyElement.prototype.loadData = function (url) {
+ if (this._cache[url]) {
+ queueMicrotask(() => {
+ this._setData(this._cache[url]);
+ this.dispatchEvent(new Event("load"));
+ });
+ } else {
+ fetch(url)
+ .then((res) => res.arrayBuffer())
+ .then((data) => {
+ this._cache[url] = data;
+ this._setData(data);
+ this.dispatchEvent(new Event("load"));
+ });
+ }
+};
+```
+
+## 规范
+
+{{Specifications}}
+
+## 浏览器兼容性
+
+{{Compat}}
+
+## 参见
+
+- {{domxref("Window.queueMicrotask()")}}
+- [`core-js` 中 `queueMicrotask()` 的 polyfill](https://github.com/zloirock/core-js#queuemicrotask)
+- [在 JavaScript 中通过 queueMicrotask() 使用微任务](/zh-CN/docs/Web/API/HTML_DOM_API/Microtask_guide)
+- [异步 JavaScript](/zh-CN/docs/Learn/JavaScript/Asynchronous)
+- [queueMicrotask 的解释](https://github.com/fergald/docs/blob/master/explainers/queueMicrotask.md)
+- [任务、微任务、队列和调度](https://jakearchibald.com/2015/tasks-microtasks-queues-and-schedules/)(作者:Jake Archibald)
diff --git a/files/zh-cn/web/api/workerglobalscope/structuredclone/index.md b/files/zh-cn/web/api/workerglobalscope/structuredclone/index.md
new file mode 100644
index 00000000000000..67259ae234ade5
--- /dev/null
+++ b/files/zh-cn/web/api/workerglobalscope/structuredclone/index.md
@@ -0,0 +1,61 @@
+---
+title: WorkerGlobalScope:structuredClone() 方法
+slug: Web/API/WorkerGlobalScope/structuredClone
+l10n:
+ sourceCommit: 8b6cec0ceff01e7a9d6865cf5306788e15cce4b8
+---
+
+{{APIRef("Web Workers API")}}{{AvailableInWorkers("worker")}}
+
+{{domxref("WorkerGlobalScope")}} 接口的 **`structuredClone()`** 方法使用[结构化克隆算法](/zh-CN/docs/Web/API/Web_Workers_API/Structured_clone_algorithm)将给定的值进行{{Glossary("deep copy", "深拷贝")}}。
+
+该方法还支持把原值中的[可转移对象](/zh-CN/docs/Web/API/Web_Workers_API/Transferable_objects)_转移_(而不是拷贝)到新对象上。可转移对象与原始对象分离并附加到新对象;它们将无法在原始对象中被访问。
+
+## 语法
+
+```js-nolint
+structuredClone(value)
+structuredClone(value, options)
+```
+
+### 参数
+
+- `value`
+ - : 被克隆的对象。可以是任何[结构化克隆支持的类型](/zh-CN/docs/Web/API/Web_Workers_API/Structured_clone_algorithm#支持的类型)。
+- `options` {{optional_inline}}
+
+ - : 一个具有以下属性的对象:
+
+ - `transfer`
+ - : 一个[可转移对象](/zh-CN/docs/Web/API/Web_Workers_API/Transferable_objects)的数组,里面的对象将被移动而不是克隆到返回的对象上。
+
+### 返回值
+
+原始值(`value`)的[深拷贝](/zh-CN/docs/Glossary/Deep_copy)。
+
+### 异常
+
+- `DataCloneError` {{domxref("DOMException")}}
+ - : 如果输入值的任一部分不可序列化,则抛出该异常。
+
+## 描述
+
+参见 {{domxref("Window.structuredClone()")}} 以获取该函数的详细信息。
+
+## 示例
+
+参见 {{domxref("Window.structuredClone()")}} 以获取示例。
+
+## 规范
+
+{{Specifications}}
+
+## 浏览器兼容性
+
+{{Compat}}
+
+## 参见
+
+- [`core-js`](https://github.com/zloirock/core-js) 已经支持 [`structuredClone` 的 polyfill](https://github.com/zloirock/core-js#structuredclone)
+- [结构化克隆算法](/zh-CN/docs/Web/API/Web_Workers_API/Structured_clone_algorithm)
+- [结构化克隆的 polyfill](https://github.com/ungap/structured-clone)
diff --git a/files/zh-cn/web/javascript/guide/using_promises/index.md b/files/zh-cn/web/javascript/guide/using_promises/index.md
index 19a72bf6bb5b13..3b891cfb145dd7 100644
--- a/files/zh-cn/web/javascript/guide/using_promises/index.md
+++ b/files/zh-cn/web/javascript/guide/using_promises/index.md
@@ -542,7 +542,7 @@ Promise 回调(.then)
你可能遇到如下情况:你的一些 Promise 和任务(例如事件或回调)会以不可预测的顺序启动。此时,你或许可以通过使用微任务检查状态或平衡 Promise,并以此有条件地创建 Promise。
-如果你认为微任务可能会帮助你解决问题,那么请阅读[微任务指南](/zh-CN/docs/Web/API/HTML_DOM_API/Microtask_guide),学习如何用 [`queueMicrotask()`](/zh-CN/docs/Web/API/queueMicrotask) 来将一个函数作为微任务添加到队列中。
+如果你认为微任务可能会帮助你解决问题,那么请阅读[微任务指南](/zh-CN/docs/Web/API/HTML_DOM_API/Microtask_guide),学习如何用 {{domxref("Window.queueMicrotask()", "queueMicrotask()")}} 来将一个函数作为微任务添加到队列中。
## 参见
diff --git a/files/zh-cn/web/javascript/reference/global_objects/array/index.md b/files/zh-cn/web/javascript/reference/global_objects/array/index.md
index 3cc64c92708fe8..42659eb63d6198 100644
--- a/files/zh-cn/web/javascript/reference/global_objects/array/index.md
+++ b/files/zh-cn/web/javascript/reference/global_objects/array/index.md
@@ -677,7 +677,7 @@ const fruitsCopy3 = fruits.slice();
const fruitsDeepCopy = JSON.parse(JSON.stringify(fruits));
```
-你还可以使用 [`structuredClone()`](/zh-CN/docs/Web/API/structuredClone) 方法创建深拷贝,该方法的优点是允许源代码中的[可转移对象](/zh-CN/docs/Web/API/Web_Workers_API/Transferable_objects)被*转移*到新的副本,而不仅仅是克隆。
+你还可以使用 {{DOMxRef("Window.structuredClone", "structuredClone()")}} 方法创建深拷贝,该方法的优点是允许源代码中的[可转移对象](/zh-CN/docs/Web/API/Web_Workers_API/Transferable_objects)被*转移*到新的副本,而不仅仅是克隆。
最后,重要的是要理解,将现有数组赋值给新变量并不会创建数组或其元素的副本。相反,新变量只是对原数组的引用或别名;也就是说,原来的数组名和新的变量名只是同一个对象的两个名称(因此总是被计算为[严格相等](/zh-CN/docs/Web/JavaScript/Equality_comparisons_and_sameness#严格相等))。因此,如果你对原数组的值或新变量的值做了任何改变,另一个也会改变:
diff --git a/files/zh-cn/web/javascript/reference/global_objects/evalerror/index.md b/files/zh-cn/web/javascript/reference/global_objects/evalerror/index.md
index 441bcf1018e41c..bcb597615d3c13 100644
--- a/files/zh-cn/web/javascript/reference/global_objects/evalerror/index.md
+++ b/files/zh-cn/web/javascript/reference/global_objects/evalerror/index.md
@@ -7,7 +7,7 @@ slug: Web/JavaScript/Reference/Global_Objects/EvalError
本对象代表了一个关于 {{jsxref("Global_Objects/eval", "eval()")}} 全局函数的错误。此异常不再会被 JavaScript 抛出,但是 EvalError 对象仍然存在,以保持兼容性。
-`EvalError` 是一个{{Glossary("serializable object", "可序列化对象")}},所以可以使用 {{domxref("structuredClone()")}} 对它进行克隆,也可以使用 {{domxref("Worker/postMessage()", "postMessage()")}} 在 [Worker](/zh-CN/docs/Web/API/Worker) 之间拷贝它。
+`EvalError` 是一个{{Glossary("serializable object", "可序列化对象")}},所以可以使用 {{DOMxRef("Window.structuredClone", "structuredClone()")}} 对它进行克隆,也可以使用 {{domxref("Worker/postMessage()", "postMessage()")}} 在 [Worker](/zh-CN/docs/Web/API/Worker) 之间拷贝它。
## 构造函数
diff --git a/files/zh-cn/web/javascript/reference/global_objects/json/stringify/index.md b/files/zh-cn/web/javascript/reference/global_objects/json/stringify/index.md
index 8fdbeba121d412..c59e3fffc11eaf 100644
--- a/files/zh-cn/web/javascript/reference/global_objects/json/stringify/index.md
+++ b/files/zh-cn/web/javascript/reference/global_objects/json/stringify/index.md
@@ -183,7 +183,7 @@ JSON.stringify(circularReference);
要序列化循环引用,你可以使用支持循环引用的库(例如 Douglas Crockford 的 [cycle.js](https://github.com/douglascrockford/JSON-js/blob/master/cycle.js)),或者自己实现一个解决方案,这需要找到循环引用,并用可序列化的值替换(或移除)它们。
-如果你在使用 `JSON.stringify()` 来深拷贝一个对象,你可能想要使用 [`structuredClone()`](/zh-CN/docs/Web/API/structuredClone),它支持循环引用。JavaScript 引擎的二进制序列化 API,比如 [`v8.serialize()`](https://nodejs.org/api/v8.html#v8serializevalue),也支持循环引用。
+如果你在使用 `JSON.stringify()` 来深拷贝一个对象,你可能想要使用 {{DOMxRef("Window.structuredClone", "structuredClone()")}},它支持循环引用。JavaScript 引擎的二进制序列化 API,比如 [`v8.serialize()`](https://nodejs.org/api/v8.html#v8serializevalue),也支持循环引用。
### `JSON.stringify`用作 JavaScript
diff --git a/files/zh-cn/web/javascript/reference/global_objects/rangeerror/index.md b/files/zh-cn/web/javascript/reference/global_objects/rangeerror/index.md
index 109b2de164969a..ee9dcf684e9f70 100644
--- a/files/zh-cn/web/javascript/reference/global_objects/rangeerror/index.md
+++ b/files/zh-cn/web/javascript/reference/global_objects/rangeerror/index.md
@@ -17,7 +17,7 @@ slug: Web/JavaScript/Reference/Global_Objects/RangeError
- 尝试使用 {{jsxref("Array")}} 构造函数创建一个具有不合法的长度的字符串,或
- 传递错误值到数值计算方法({{jsxref("Number.toExponential()")}}、{{jsxref("Number.toFixed()")}} 或 {{jsxref("Number.toPrecision()")}})。
-`RangeError` 是一个{{Glossary("serializable object", "可序列化对象")}},所以可以使用 {{domxref("structuredClone()")}} 对它进行克隆,也可以使用 {{domxref("Worker/postMessage()", "postMessage()")}} 在 [Worker](/zh-CN/docs/Web/API/Worker) 之间拷贝它。
+`RangeError` 是一个{{Glossary("serializable object", "可序列化对象")}},所以可以使用 {{DOMxRef("Window.structuredClone", "structuredClone()")}} 对它进行克隆,也可以使用 {{domxref("Worker/postMessage()", "postMessage()")}} 在 [Worker](/zh-CN/docs/Web/API/Worker) 之间拷贝它。
## 构造函数
diff --git a/files/zh-cn/web/javascript/reference/global_objects/referenceerror/index.md b/files/zh-cn/web/javascript/reference/global_objects/referenceerror/index.md
index e12d66a7631d17..844212f054d77d 100644
--- a/files/zh-cn/web/javascript/reference/global_objects/referenceerror/index.md
+++ b/files/zh-cn/web/javascript/reference/global_objects/referenceerror/index.md
@@ -7,7 +7,7 @@ slug: Web/JavaScript/Reference/Global_Objects/ReferenceError
**`ReferenceError`**(引用错误)对象代表当一个不存在(或尚未初始化)的变量被引用时发生的错误。
-`ReferenceError` 是一个{{Glossary("serializable object", "可序列化对象")}},所以可以使用 {{domxref("structuredClone()")}} 对它进行克隆,也可以使用 {{domxref("Worker/postMessage()", "postMessage()")}} 在 [Worker](/zh-CN/docs/Web/API/Worker) 之间拷贝它。
+`ReferenceError` 是一个{{Glossary("serializable object", "可序列化对象")}},所以可以使用 {{DOMxRef("Window.structuredClone", "structuredClone()")}} 对它进行克隆,也可以使用 {{domxref("Worker/postMessage()", "postMessage()")}} 在 [Worker](/zh-CN/docs/Web/API/Worker) 之间拷贝它。
## 构造函数
diff --git a/files/zh-cn/web/javascript/reference/global_objects/syntaxerror/index.md b/files/zh-cn/web/javascript/reference/global_objects/syntaxerror/index.md
index 04cc06001dc53a..8099336e754d09 100644
--- a/files/zh-cn/web/javascript/reference/global_objects/syntaxerror/index.md
+++ b/files/zh-cn/web/javascript/reference/global_objects/syntaxerror/index.md
@@ -7,7 +7,7 @@ slug: Web/JavaScript/Reference/Global_Objects/SyntaxError
**`SyntaxError`**(语法错误)对象代表尝试解析不符合语法的代码的错误。当 Javascript 引擎解析代码时,遇到了不符合语法规范的标记(token)或标记顺序,则会抛出 `SyntaxError`。
-`SyntaxError` 是一个{{Glossary("serializable object", "可序列化对象")}},所以可以使用 {{domxref("structuredClone()")}} 对它进行克隆,也可以使用 {{domxref("Worker/postMessage()", "postMessage()")}} 在 [Worker](/zh-CN/docs/Web/API/Worker) 之间拷贝它。
+`SyntaxError` 是一个{{Glossary("serializable object", "可序列化对象")}},所以可以使用 {{DOMxRef("Window.structuredClone", "structuredClone()")}} 对它进行克隆,也可以使用 {{domxref("Worker/postMessage()", "postMessage()")}} 在 [Worker](/zh-CN/docs/Web/API/Worker) 之间拷贝它。
## 构造函数
diff --git a/files/zh-cn/web/javascript/reference/global_objects/typeerror/index.md b/files/zh-cn/web/javascript/reference/global_objects/typeerror/index.md
index 6736360da9fbc5..ba4238e6bef19b 100644
--- a/files/zh-cn/web/javascript/reference/global_objects/typeerror/index.md
+++ b/files/zh-cn/web/javascript/reference/global_objects/typeerror/index.md
@@ -13,7 +13,7 @@ slug: Web/JavaScript/Reference/Global_Objects/TypeError
- 尝试修改无法更改的值;或
- 尝试以不适当的方法使用一个值。
-`TypeError` 是一个{{Glossary("serializable object", "可序列化对象")}},所以可以使用 {{domxref("structuredClone()")}} 对它进行克隆,也可以使用 {{domxref("Worker/postMessage()", "postMessage()")}} 在 [Worker](/zh-CN/docs/Web/API/Worker) 之间拷贝它。
+`TypeError` 是一个{{Glossary("serializable object", "可序列化对象")}},所以可以使用 {{DOMxRef("Window.structuredClone", "structuredClone()")}} 对它进行克隆,也可以使用 {{domxref("Worker/postMessage()", "postMessage()")}} 在 [Worker](/zh-CN/docs/Web/API/Worker) 之间拷贝它。
## 构造函数
diff --git a/files/zh-cn/web/javascript/reference/global_objects/urierror/index.md b/files/zh-cn/web/javascript/reference/global_objects/urierror/index.md
index 2c4d45d7b4c028..843e5bf4c6643c 100644
--- a/files/zh-cn/web/javascript/reference/global_objects/urierror/index.md
+++ b/files/zh-cn/web/javascript/reference/global_objects/urierror/index.md
@@ -7,7 +7,7 @@ slug: Web/JavaScript/Reference/Global_Objects/URIError
**`URIError`** 对象用来表示以一种错误的方式使用全局 URI 处理函数而产生的错误。
-`URIError` 是 {{Glossary("serializable object", "可序列化对象")}},所以可以使用 {{domxref("structuredClone()")}} 克隆它,或者在 [Worker](/zh-CN/docs/Web/API/Worker) 间使用 {{domxref("Worker/postMessage()", "postMessage()")}} 拷贝这个对象。
+`URIError` 是 {{Glossary("serializable object", "可序列化对象")}},所以可以使用 {{DOMxRef("Window.structuredClone", "structuredClone()")}} 克隆它,或者在 [Worker](/zh-CN/docs/Web/API/Worker) 间使用 {{domxref("Worker/postMessage()", "postMessage()")}} 拷贝这个对象。
## 构造函数