Ecmascript 函数返回引用的真实世界示例?

IT技术 javascript reference
2021-03-15 09:27:32

ECMAScript 规范,第 8.7 节参考规范类型指出:

Reference类型用于解释这种运营商的行为deletetypeof以及赋值运算符。[…] 引用是解析的名称绑定。

允许函数调用返回引用。承认这种可能性纯粹是为了宿主对象。本规范定义的内置 ECMAScript 函数没有返回引用,也没有规定用户定义的函数返回引用。

最后两句让我印象深刻。有了这个,你可以做这样的事情coolHostFn() = value有效语法,顺便说一句)。所以我的问题是:

是否有任何 ECMAScript 实现定义了产生Reference值的宿主函数对象

1个回答

谷歌浏览器的引擎非常适合这种方式。但是,您会注意到在控制台中ReferenceError: Invalid left-hand side in assignment执行以下操作时会得到一个

var myObj = new Object();
function myFunc() {
    myObj.test = "blah";
    return myObj;
}
myFunc() = new String("foobar");

然而,这是一个早期错误,因为 v8 的 ECMAScript 实现,如果它myFunc在假设引用错误之前正确执行,这应该可以工作

那么,在 v8 的当前实现中?是和否。它是默认实现的(由于语言的结构方式),但是该功能因不同的问题而停止。coolHostFn() = value不应该返回错误,并且确实应该能够正确执行。但是3=4应该肯定会返回左侧分配错误。

不完全是您问题的答案,但我希望它有助于澄清为什么它不起作用。

(这是问题/票,以防有人想插话... http://code.google.com/p/v8/issues/detail?id=838

似乎 ES6 使这实际上是一个早期错误,因此 v8 现在遵循规范......(请参阅链接的错误)
2021-04-22 09:27:32
@Swivel 不,我认为这不能回答我关于“导致参考值的主机函数”的问题。
2021-05-09 09:27:32
@Bergi如果这个答案适合你的问题,你介意接受吗?
2021-05-13 09:27:32
谢谢,有趣的是 Chrome 根本不支持这些功能。然而它真的没有回答“有这样的功能吗?”的问题。(因为你不能编码 a myFunc,它必须是一个宿主对象)
2021-05-16 09:27:32
的确。我没有代表发表评论,所以我想我会尝试对答案进行打击。“有这样的功能吗?”的答案 是是的。Chrome 的不支持实际上是一个错误,而不是遗漏的功能或有目的地不支持特定实现。是的,这个例子有点粗略。只是把它放在一起尝试尽可能最好地解释。:)
2021-05-19 09:27:32