2
私はこれをnode.jsで実行しています。なぜ、次のコードセグメントがcb
varのスコープを失うのですか?なぜこのjavascript関数はクロージャスコープを失っていますか?
Client.prototype.post = function(path, data, callback) {
var self = this;
var cb = callback;
return function() {
console.log(path);
console.log(cb);
rest.post(self.baseUrl + path, data).on('complete', cb || this.callback);
}
};
この関数の呼び出しは、このclient.post('/user', {}, function() {});
のように見えるし、次のように出力します
/user
undefined
私は[Function]
返さ関数である第2のラインを期待していおそらくどちらかのjsの.call()
かで実行されています.apply()
の方法で実行されるスコープを変更することができます。しかし、私はのようにcb
にアクセスできると思うでしょう。
更新:関数内でコールバックをラップすると機能します。しかし、私はまだここで何が起こっているのか説明したいと思います。
'call' /' apply'はスコープではなくコンテキストを変更します。あなたが言っていることは起こってはならないということです。実際のコードにリンクできますか? – david
私のために働きます:http://jsfiddle.net/Squeegy/Uf9nD/あなたの問題はおそらく他の場所にあります... –
https://gist.github.com/1503056 lines 33-41。このファイルは、vowsj –