为了扩展这个问题,我希望这个陈述是可能的:
declare("Hello") = bindVal("World")
其中declare
和bindVal
都是执行以下操作的函数:
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
总之,左侧在右侧之前完全评估。