gpt4 book ai didi

javascript - 什么是 'global symbol registry' ?

转载 作者:可可西里 更新时间:2023-11-01 02:35:39 25 4
gpt4 key购买 nike

var sym = Symbol();

window['sym'],它已经是全局作用域

但是MDN说:

The above syntax using the Symbol() function will not create a global symbol that is available in your whole codebase. To create symbols available across files and in a global scope-like environment, use the methods Symbol.for() and Symbol.keyFor() to set and retrieve symbols from the global symbol registry.

sym 在浏览器中已经在全局范围内,具有上述声明语法。

什么是全局符号注册表?

每个 html 文档都与 window 对象相关联。

所以,在浏览器世界中,跨文件/领域的符号可用性范围与全局范围(window 对象)不同有何不同?

最佳答案

var sym = Symbol();

is creating a new property sym in dictionary(window), which is in global scope, where value can be accessed as window['sym'].

嗯,不。它确实创建了一个符号并将其分配给名为 sym局部变量。仅当您在全局范围内执行此代码(为了模块化,您通常不会这样做)它才会在您的领域(js 环境)的全局对象上创建一个属性。请注意,此全局对象并不总是像网页中那样是 window,它取决于您的环境。

What is global symbol registry?

它是一个符号注册表(想想:字典),您可以通过字符串键访问这些符号。在这种情况下,“全局”确实意味着比全局范围更全局,全局符号注册表确实跨越引擎的所有领域。在浏览器中,网页、iframe 和网络 worker 都有自己的领域和自己的全局对象,但它们可以通过这个全局注册表共享符号。

而这次分享正是目的所在。如果你不这样说

var sym1 = Symbol("shared");

var sym2 = Symbol("shared");

在两个地方,然后 sym1 !== sym2。如果您有一个共享对象,使用符号s 作为属性键会创建两个不同的属性。但是如果你这样做

var sym1 = Symbol.for("shared");

var sym2 = Symbol.for("shared");

然后 sym1 === sym2 并且当您使用它时,您将始终获得相同的属性。

另见 Crossing realms with symbols on 2alitySymbols and why they're awesome有关更多示例,包括类似全局的众所周知的符号。

关于javascript - 什么是 'global symbol registry' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31897015/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com