0

私はJavaScriptの匿名関数とスコープについて学んでおり、何かを理解しようとしていますが、少し行き詰まっています。

次の3つの機能があります。

var funcA = function (value) {
    test = value;
};

var funcB = function (value) {
    this.test = value;
};

var funcC = function (func,value) {
    var item = {};
    //single line invocation
}

//single line invocation同じ効果を持つのではなく、次の2つの呼び出しの結果が異なるように、javascriptの1行(どこにあるのか)を書き込もうとしています:

funcC(funcA, "set");
funcC(funcB, "set");

funcB はthis.test代わりに参照しているため、funcC で「アイテム」オブジェクトを利用できるように、ローカル (インスタンス) 値を変更することは理にかなっています。次のような匿名関数の「もの」を試してみました。

item.(function(func,value){func(value)})(func, value);

しかし、異なる結果をもたらすステートメントに関して、私は運がありませんでした。(つまり、node(.js) を使用してコードを実行すると、testとのthis.test値が両方とも変更されます)。

これをよりよく理解するための助けは素晴らしいでしょう。

前もって感謝します、

パラゴンRG

4

2 に答える 2

2

call作業するインスタンスを伝えるために使用する必要があります。

funcB.call(item, value);
于 2012-04-10T20:23:01.917 に答える
0

匿名関数をオブジェクト プロパティとして使用することはできません。あなたがしたい

var item = {"f": func};
item.f(value);
// item.test == value now

右?JavaScript がこれを行う方法は次の.call()関数です。

func.call(item, value);
// with the difference that item has no "f" property here

call無名関数式でも使用できます。

(function(val){ this.test = val; }).call(item, value);
// yet this equivalent looks much cleaner:
item.test = value;
于 2012-04-10T20:26:16.900 に答える