在评估右侧之前,是否可以强制`=`的左侧完全评估参考?

时间:2013-10-17 18:55:35

标签: javascript

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

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

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

2 个答案:

答案 0 :(得分:5)

an assignment must be a referenceyou can't return a reference from a function的左侧部分:

  

此规范未定义的内置ECMAScript函数返回   引用,并没有为用户定义的函数提供   返回参考。

所以你必须这样做。

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

function declare(n){
   return function(v){ window[n]=v }
}
declare("Hello")(bindVal("World"));

答案 1 :(得分:1)

你想要做的事情听起来很有意思,但不幸的是,用Javascript你不能这样做。

declare一个函数只能执行操作并返回一些东西。

你不能为函数执行调用分配任何东西,但你可以尝试像javascript中的链接方法。