0

文字列の場合に備えて、特定のjavascript変数を関数でオーバーライドしようとしていました:

mapper = _.isString(mapper) ? function (item) { return item[mapper]; } : mapper;

しかし、驚いたことに、mapperは依然として指定された文字列であり、関数ではありません!

上記のステートメントと同じ右辺値を新しい変数に割り当てたところ、期待どおりに動作していました。

var mapFunction = _.isString(mapper) ? function (item) { return item[mapper]; } : mapper;

(私は mapFunction ではなく、コードの後半で mapFunction を使用してまし)

何が欠けていたのですか?文字列だった変数に関数を代入することはできませんか?

4

2 に答える 2

1

問題はmapper、関数内で元の値が記憶されず、呼び出されたときに新しい値になることです。

したがって、インデックスとして使用されている関数への参照があります。

コピーを保持し、それを関数内で使用する必要があります。

var _orgMapper = mapper;
mapper = _.isString(mapper) ? function (item) { return item[_orgMapper]; } : mapper;
于 2013-10-23T13:36:51.450 に答える