0

質問を拡大するには、次のステートメントが可能であることを望みます。

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

ここで、declarebindValは次のような関数です。

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

ここでのポイントは、declareいくつかの操作を実行し、いくつかの副作用があることです。しかし、私の場合、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 に答える