为了扩展这个问题,我希望这个陈述成为可能:
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
总之,左侧在右侧之前完全评估。
答案 0 :(得分:5)
an assignment must be a reference和you 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中的链接方法。