21

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

Reference类型用于解释诸如 、 和赋值运算符等运算符的delete行为typeof。[…] 引用是解析的名称绑定。

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

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

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

4

1 回答 1

7

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

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

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

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

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

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

于 2012-10-30T16:50:25.483 回答