0

为了扩展这个问题,我希望这个陈述是可能的:

declare("Hello") = bindVal("World")

其中declarebindVal都是执行以下操作的函数:

function declare(p){ return window[p] }
function bindVal(x){ return x }

这里的重点是declare运行一些操作并有一些副作用。但在我的情况下,声明不必返回任何东西。虽然如果它返回一个等待赋值的“悬空”变量,那将是最理想的。

现在在控制台中运行此表达式会引发错误:

ReferenceError: Invalid left-hand side in assignment

所以我的问题是:我可以对函数做任何花哨的事情以declare使我的陈述成为可能吗?在我看来,这是评估左侧和右侧的顺序:

declare("Hello") = bindVal("world")
window.Hello     = bindVal("world")
window.Hello     = world

总之,左侧在右侧之前完全评估。

4

2 回答 2

5

赋值 的左边部分必须是引用,并且不能从函数返回引用

本规范定义的内置 ECMAScript 函数没有返回引用,也没有规定用户定义的函数返回引用。

所以你必须这样做。

您可以返回要更改的变量的名称,但最干净的方法是返回一个执行赋值的函数:

function declare(n){
   return function(v){ window[n]=v }
}
declare("Hello")(bindVal("World"));
于 2013-10-17T18:58:32.223 回答
1

您尝试做的事情听起来很有趣,但不幸的是,使用 Javascript 您无法做到这一点。

declare一个函数只能进行操作并返回一些东西或什么都不返回。

您不能将任何内容分配给函数执行调用,但是您可以尝试使用 javascript 中的链接方法之类的方法。

于 2013-10-17T19:01:58.673 回答